Thomas Hruska a écrit :
> Thomas Hruska wrote:
>   
>> So I'm over on the openssl-users mailing list quite effectively baiting 
>> a flame war on select().  At this point it is just me and some other guy 
>> going back and forth on the intricacies of select().  He says that 
>> select() does NOT guarantee that a recv() that follows will be 
>> non-blocking while MSDN Library says the contrary:
>>
>> http://msdn2.microsoft.com/en-us/library/ms740141.aspx
>>
>> "The parameter readfds identifies the sockets that are to be checked for 
>> readability...<snip bind()/listen() stuff>...For other sockets, 
>> readability means that queued data is available for reading such that a 
>> call to recv, WSARecv, WSARecvFrom, or recvfrom is guaranteed not to block."
>>
>> My target platform is Windows (obviously).
>>
>> So, under what circumstances would a select() immediately followed by a 
>> recv() fail to be non-blocking despite the documentation saying 
>> otherwise?  Assume only a single thread of a single process has access 
>> to the socket handle/ID.
>>
>> And, while I'm at it, I was under the general impression that select() 
>> under Windows was roughly the same under Linux.  Does the above also 
>> apply there?  The manpages don't really say either way (but maybe I just 
>> missed it).  You would think critical behavior like that would be 
>> documented somewhere.
>>     
>
> I think I'm slowly coming to the realization that I've been doing socket 
> programming _WRONG_ for the past 7 years.  Still waiting on feedback 
> from my last message (to openssl-users), but if the answer is what I 
> think it is, I will have to spend my weekend rewriting large chunks of 
> code.  And it will make for an interesting anecdote in Second Edition.
>
> I've always thought socket programming was a little odd but couldn't put 
> my finger on it.  And should it turn out that it was because I was 
> writing the code incorrectly, that will prove to be the most 
> enlightening (and embarrassing) thing to happen since, well, I can't 
> remember the last time I've been properly enlightened/embarrassed.  It 
> has been years.  And here I thought I knew everything ;)
>
>   

The ACE framework team describe some diffences between Linux and Windows 
socket behavior.
may be it can help.



Reply via email to