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