TCP/IP sockety: Jak poznat, zda mi server neuzavrel spojeni??

Pavel Kankovsky peak na kerberos.troja.mff.cuni.cz
Pondělí Listopad 3 15:46:29 CET 1997


On Sat, 1 Nov 1997, Ivo Zacek wrote:

> Martin Hinner wrote:
> > 
> > Pouzivam na Tcp/ip spojeni sys/socket.h funkce, ale ty mi
> > neumoznuji zjistit, zda mi protejsi strana neuzavrela spojeni
> > <close();> - jak se to tedy da vyresit v Linuxu, nebo jinych
> > *nixech??
> 
> Ja to (zatim uspesne) poznavam podle toho, ze volani read()
> vrati nulu a zaroven errno != EINTR. Upozornuji ale, ze jsem na to
> prisel experimentalne, takze nevim, zda to funguje za vsech okolnosti.

test errno != EINTR je zbytecny (a potencialne spatny), protoze pokud
dojde k preruseni signalem pred prectenim aspon 1 bajtu, pak read() vraci
-1 a nastavuje errno, jinak vrati (nenulovy) pocet zatim prectenych bajtu
(podobne by read() vratil -1 a nastavil errno na EWOULDBLOCK/EAGAIN, kdyby
to bylo neblokujici cteni a nebyl prave ani bajtik k dispozici)

je to skutecne tak, ze konec dat nastava prave tehdy, kdyz read() vraci 0

--Pavel Kankovsky aka Peak (troja.mff.cuni.cz network administration)

P.S. je to mirne nelogicke, ale furt lepsi nez Win32 ;)
P.S.2 ovsem toto je unixove chovani, co to dela na Netware, to nevim :)



Další informace o konferenci Linux