
What would happen if a timeout occurs in the _socket_ level?
I believe a (unix) socket level problem (including remote server closing the connection unexpectedly) results in a Posix SigPIPE. Is you set the default action to ignore: installHandler sigPIPE Ignore Nothing Then it gets converted to an asynchronous exception... that means you have to be extremely careful with your 'catch' clauses so as to ensure that system resources allocated to the socket get cleaned up. Keean.

K P SCHUPKE writes:
I believe a (unix) socket level problem (including remote server closing the connection unexpectedly) results in a Posix SigPIPE.
No, it's an ordinary failure in the read()/write() operation. Quoting from socket(7): | SO_RCVTIMEO and SO_SNDTIMEO | Specify the receiving or sending timeouts until | reporting an error. The parameter is a struct timeval. | If an input or output function blocks for this period | of time, and data has been sent or received, the | return value of that function will be the amount of | data transferred; if no data has been transferred and | the timeout has been reached then -1 is returned with | errno set to EAGAIN or EWOULDBLOCK just as if the | socket was specified to be nonblocking. If the timeout | is set to zero (the default) then the operation will | never timeout. Turns my earlier statement about setting errno to ETIMEDOUT wasn't quite correct. :-)
Is you set the default action to ignore:
installHandler sigPIPE Ignore Nothing
Then it gets converted to an asynchronous exception...
I am not sure I understand this: If I say _Ignore_, then an asynchronous exception will be thrown? Would the exception tell me _which_ Socket had the error? It would be raised in the main thread, right? How could I tell which Socket had the timeout if I used more than one? Peter
participants (2)
-
MR K P SCHUPKE
-
Peter Simons