33
44use spawn_worker:: { getpid, SpawnWorker , Stdio , TrampolineData } ;
55
6- use std:: ffi:: CString ;
6+ use crate :: service:: blocking:: SidecarTransport ;
7+ use crate :: setup:: { DefaultLiaison , Liaison } ;
8+ use std:: ffi:: { CStr , CString } ;
79use std:: os:: unix:: net:: UnixListener as StdUnixListener ;
810
911use crate :: config:: Config ;
@@ -13,6 +15,7 @@ use nix::sys::socket::{shutdown, Shutdown};
1315use std:: io;
1416use std:: os:: fd:: RawFd ;
1517use std:: os:: unix:: prelude:: { AsRawFd , FromRawFd , IntoRawFd , OwnedFd } ;
18+ use std:: thread;
1619use std:: time:: Instant ;
1720use tokio:: net:: { UnixListener , UnixStream } ;
1821use tokio:: select;
@@ -28,10 +31,43 @@ use datadog_crashtracker::{
2831#[ cfg( target_os = "linux" ) ]
2932use spawn_worker:: { entrypoint, get_dl_path_raw} ;
3033#[ cfg( target_os = "linux" ) ]
31- use std:: ffi:: CStr ;
32- #[ cfg( target_os = "linux" ) ]
3334use tracing:: warn;
3435
36+ pub fn start_master_listener_unix ( master_pid : i32 ) -> io:: Result < ( ) > {
37+ let liaison = DefaultLiaison :: for_master_pid ( master_pid as u32 ) ;
38+
39+ // Try to acquire the listening endpoint via the liaison
40+ let std_listener = match liaison. attempt_listen ( ) ? {
41+ Some ( l) => l,
42+ None => return Ok ( ( ) ) ,
43+ } ;
44+
45+ let _ = thread:: Builder :: new ( )
46+ . name ( "dd-sidecar" . into ( ) )
47+ . spawn ( move || {
48+ let acquire_listener = move || -> io:: Result < _ > {
49+ std_listener. set_nonblocking ( true ) ?;
50+ let listener = UnixListener :: from_std ( std_listener. try_clone ( ) ?) ?;
51+ let cancel = {
52+ let fd = listener. as_raw_fd ( ) ;
53+ move || stop_listening ( fd)
54+ } ;
55+ Ok ( ( move |handler| accept_socket_loop ( listener, handler) , cancel) )
56+ } ;
57+
58+ let _ = enter_listener_loop ( acquire_listener) ;
59+ } )
60+ . map_err ( io:: Error :: other) ?;
61+
62+ Ok ( ( ) )
63+ }
64+
65+ pub fn connect_worker_unix ( master_pid : i32 ) -> io:: Result < SidecarTransport > {
66+ let liaison = DefaultLiaison :: for_master_pid ( master_pid as u32 ) ;
67+ let channel = liaison. connect_to_server ( ) ?;
68+ Ok ( channel. into ( ) )
69+ }
70+
3571#[ no_mangle]
3672#[ allow( unused) ]
3773pub extern "C" fn ddog_daemon_entry_point ( trampoline_data : & TrampolineData ) {
0 commit comments