TCP stream pid átadás

Fórumok

Ha van egy futó c-ben írt app, ami tcp server socket-en hallgat, az connected után át tudja adni a socket leírót egy másik épp akkor elinduló processnek (nem thread), hogy azután az vigye tovább? Most bennem annyi érv szól mellette, mint ellene, így lusta vagyok kipróbálni, hátha valaki egy frappáns válasszal eldönti.

Hozzászólások

Ha nem csalódom (vagy nem értem nagyon félre a kérdést), de kb ezt csinálja az inetd, vagy a tcp-wrapper csomag-beli tcpd.

Talán a legkényelmesebb, ha accept után forkolsz.
Minden másolódik, így a fájl/socket-leírók is. Gyerekjáték.

UNIX-on a socket az egy file descriptor.
Windowson a socket az egy HANDLE.

Mindkét platformon az exec-nél az fd/HANDLE alapesetben* öröklődik. Kezdőknek nem nyilvánvaló, honnan tudja a gyerek processz, hogy melyik fd/HANDLE-t örökölte. A válasz, bárhonnan. Az fd/HANDLE az egy szám, ezt kell valahogy/akárhogy tudatni a gyerek processzal, pl. parancssori argumentumban.

* Alapeset azt jelenti, hogy nem intézkedsz külön a socket öröklődéséről. UNIX-on az fcntl-ben az FD_CLOEXEC flaggel állíthatod az öröklődést, Windowson a SetHandleInformation hivásban a HANDLE_FLAG_INHERIT flaggel.
--
CCC3