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,45 @@ 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 ;
34+ use std:: thread ;
3235#[ cfg( target_os = "linux" ) ]
3336use tracing:: warn;
3437
38+ pub fn start_master_listener_unix ( master_pid : i32 ) -> io:: Result < ( ) > {
39+ let liaison = DefaultLiaison :: for_master_pid ( master_pid as u32 ) ;
40+
41+ // Try to acquire the listening endpoint via the liaison
42+ let std_listener = match liaison. attempt_listen ( ) ? {
43+ Some ( l) => l,
44+ None => return Ok ( ( ) ) ,
45+ } ;
46+
47+ let _ = thread:: Builder :: new ( )
48+ . name ( "dd-sidecar" . into ( ) )
49+ . spawn ( move || {
50+ let acquire_listener = move || -> io:: Result < _ > {
51+ std_listener. set_nonblocking ( true ) ?;
52+ let listener = UnixListener :: from_std ( std_listener. try_clone ( ) ?) ?;
53+ let cancel = {
54+ let fd = listener. as_raw_fd ( ) ;
55+ move || stop_listening ( fd)
56+ } ;
57+ Ok ( ( move |handler| accept_socket_loop ( listener, handler) , cancel) )
58+ } ;
59+
60+ let _ = enter_listener_loop ( acquire_listener) ;
61+ } )
62+ . map_err ( io:: Error :: other) ?;
63+
64+ Ok ( ( ) )
65+ }
66+
67+ pub fn connect_worker_unix ( master_pid : i32 ) -> io:: Result < SidecarTransport > {
68+ let liaison = DefaultLiaison :: for_master_pid ( master_pid as u32 ) ;
69+ let channel = liaison. connect_to_server ( ) ?;
70+ Ok ( channel. into ( ) )
71+ }
72+
3573#[ no_mangle]
3674#[ allow( unused) ]
3775pub extern "C" fn ddog_daemon_entry_point ( trampoline_data : & TrampolineData ) {
0 commit comments