[zeromq-dev] Returning EINTR on interrupted non-blocking calls

Martin Sustrik sustrik at 250bpm.com
Thu Nov 19 08:02:06 CET 2009


Steven McCoy wrote:
> 2009/11/18 Martin Sustrik <sustrik at 250bpm.com <mailto:sustrik at 250bpm.com>>
> 
>     I've implemented the EINTR thing, however, it turns out that it won't be
>     of much help in multithreaded environment - the signal is delivered to a
>     single thread, leaving other threads blocked in the blocking call :(
> 
> 
>  I've seen a lot of the problems handling blocking sockets in OpenPGM 
> that I default to using non-blocking sockets internal and provide an 
> option to present either blocking or non-blocking operation on the 
> interface.
> 
> You should always leave signal handling to the application, you might 
> want to consider provided equivalent functionality to handling interrupt 
> signals though, e.g. WSACancelBlockingCall in WinSock 1, or a close 
> method that causes all blocking operations to immediately cancel.
> 
> http://msdn.microsoft.com/en-us/library/ms741547(VS.85).aspx
> 
> I made the mistake of misinterpreting this detail in the recv manpage 
> that now states "The return value will be 0 when the peer  has 
>  performed  an orderly shutdown." to being that you could close a 
> blocking socket and it would return 0.  So that was wrong and I'm not 
> aware that there is any reliable method to break a blocking socket?

So far it looks like there's none...

Martin



More information about the zeromq-dev mailing list