Problem s "tuhnutim" serveru
David Janko
djanko na infoware.cz
Pátek Leden 19 15:21:57 CET 2001
Zdravim vsechny,
udelal jsem C/S aplikaci ktera ma server na linuxu spousteny pres inetd -
podobne, jako je treba popd a pod.. Server proste cte z stdin zpravy od win
klienta a na na stdout zapisuje odpovedi. Pokud se nepodari precist/zapsat
prislusny pocet byte (nebo pride signal SIGPIPE), pak to server bere jako ze
spadlo spojeni (nebo klient) a ukonci se.
Bohuzel ted jsem zjistil, ze existuje pripad, kdy spojeni spadne a server se
presto tvari, ze je vsechno v poradku a stale stoji na read() ... a socket je
dle netstat stale ve stavu ESTABLISHED, coz nechapu a nevim, co s tim ...
Jak jsem zjistil, tak tento pripad nastane, kdyz:
- server ceka na zpravu od klienta (je na read())
- klienta odpojim od site (vytahnu kabel z eth)
- pres ctrl+alt+del shodim klienta
- zapojim kabel do eth ...
(pokud jen win chcipnout, tak je vse OK a server se ukonci)
Takze se mi postupne mnozi mrtve instance serveru ...
Vzhledem k tomu, ze treba popd se mi takhle nemnozi, tak predpokladam, ze to
jde nejak korekne vyresit a ja nekde neco opomnel obslouzit nebo tak ...
jenze netusim co ... zatim me jen napadlo spustit dalsi thread ktery by
hlidal nejaky timeout, ale moc korektni (ani jednoduche) mi to nepripada ...
Nevi pls nekdo, jak tohle (pokud mozno korektne) vyresit ? Jak poznam, ze
spojeni uz ve skutecnosti neexistuje ?
Predem moc dekuji za kazdou radu ...
S pozdravem
David Janko.
P.S.: Spojeni je tcp/ip ....
Další informace o konferenci Linux