[fpc-pascal] How to detect connection status of a socket

Ewald ewald at yellowcouch.org
Sun Apr 28 23:58:43 CEST 2013


On 22 Apr 2013, at 15:10, Xiangrong Fang wrote:
> 
> 1) fpsend() just pass data to the OS's socket layer without try to determine if the connection is still alive, right?

I suppose, but there exists an error code that might come in handy: ENotConn (see http://linux.die.net/man/2/send), which is returned by send().


> 
> 2) is it normal that in BLOCK mode, recv returns 0?  i.e. if I receive a 0 from fprecv(), I can say that the connection is closed by the other end (if there is no detectable socketerror), right?
> 

Yes, if recv() return 0, it mens the client disconnected. If it returns -1, errno will be set. From http://linux.die.net/man/2/recv (see `return value`):
	"These calls return the number of bytes received, or -1 if an error occurred. The return value will be 0 when the peer has performed an orderly shutdown."

Note that even in non-blocking mode, 0 means the socket is closed. If you received no data yet, you will get -1 as a return value and errno will be set to EAgain of EWouldBlock (see the link above).

Does this help or am I completely talking besides the point?

--
Ewald

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20130428/a37222b6/attachment.html>


More information about the fpc-pascal mailing list