recv blocks although socket is ready



I have a strange problem using select() and recv(). Intermittedly it
occurs, that even though select() reports the socket to be readable the
following call to recv() blocks. When I shutdown the other peer of the
connection recv() returns and WSAGetLastError() returns WSAESHUTDOWN.
This only occures on our Dell Workstation PWS670. I couldn't reproduce
it on a different machine. I replaced the NIC with a different modell
from a different vendor and installed a different driver but the
problem persited. Running the same app on the same hardware under Linux
I was not able to reproduce the problem though.

Another point which seems worth noting is, that the problem occurs more
frequently when there is some UDP traffic on another socket. This
traffic is consumed by another thread in my app which isn't affected by
the blocking of the main thread.

My setup:
- Dell Workstation PWS670 4xXeon 3.6GHz, 3GB RAM,
- Intel(R) PRO/1000 MTW NIC or ProG-2000S (with Realtek driver)
- Windows XP SP2 (almost) fully patched

Any ideas?

Thanks,
Michael

.



Relevant Pages

  • Re: Synchronization with CAsyncSocket in CE 6.0
    ... number of bytes in the first packet, followed by packets of, say 1024 bytes. ... recv() operations, reassembling it into the format that you need. ... don't forget that recv can return zero, if the socket has ... So, CAsyncSocket while possibly a bad way to do things, does not appear to ...
    (microsoft.public.windowsce.embedded)
  • Re: Receive no data
    ... It is a best practice to shutdown ... a socket for sending once all data has been sent. ... I see multiple recv() statements in the code. ...
    (microsoft.public.win32.programmer.networks)
  • RE: BUG in Winsock on P4 HT CPU
    ... If you read the help on WSAAsyncSelect it states ... Network transport stack receives 100 bytes of data on socket s and causes ... The application issues recv(s, buffptr, 50, 0) to read 50 bytes. ... on CPU's that do not support HT, or CPUs with HT disabled. ...
    (microsoft.public.win32.programmer.networks)
  • Re: recv() hangs until SIGCHLD ?
    ... Both lsof and ls /proc//fd show that the socket used is in ESTABLISHED mode but when checking on the host on which it's connected we can't find the corresponding client socket. ... We are correctly handling EINTR in sendand recv() by restarting the call in case they get interrupted this way. ... However since this problem does not occur without threads, we can be sure that the blame is still on the receiver. ... In a practical case, we have a thread blocked in recvfor more than 12 hours, which is way beyond the timeout of the sender connection. ...
    (Linux-Kernel)
  • Re: how to avoid recv() blocking issue?
    ... using WSAEventSelect. ... we have a weak link in a chain: a timeout. ... drop the connection abnormally such that the blocking recv will never ... TerminateThread- btw, it's not a good idea, because a socket ...
    (microsoft.public.win32.programmer.networks)

Loading