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.
- 1086 megtekintés
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.
- A hozzászóláshoz be kell jelentkezni
azok socket<->stdin/out-tal oldja meg.
--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
Kérdés, hogy ezt akarja-e, vagy rá is akar esetleg szűrni valamire, amit forkolni fog?
Ha csak simán minden copy, akkor +1.
Szerk: miért csak a leírót?
- A hozzászóláshoz be kell jelentkezni
A tuti nem hasznalt fd-ket (pl maga't a server socket-et) erdemes bezarni rogton az elejen (marmint a child processz, aki kezeli a kapcsolatot, az zarja be ezeket).
- A hozzászóláshoz be kell jelentkezni
+1
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
Igen. Pld: http://www.yendor.com/programming/unix/apue/ch15.html (send_fd.c)
- A hozzászóláshoz be kell jelentkezni