blocking/non-blocking socket question.

Juan Lang juan.lang at gmail.com
Thu Jul 23 12:50:30 CDT 2009


> It is calling recv() on a socket that was previously:
> 1) set to blocking with a WS_ioctlsock() call with cmd WS_FIONBIO
> 2) AsyncSelect()'ed that should make the socket non-blocking.
(snip)
> while the second does not touch the unix fd. This leaves the unix file
> descriptor in the blocking state and the unix recvmsg() call will not
> terminate.
>
> I thought the unix file descriptor should always by non-blocking, but it
> is a while since I was looking at socket code.

No, it's possible to make blocking socket calls in Windows too.  If
you've left a socket in blocking mode, and call one of the blocking
Winsock functions, like send() or recv(), Wine will call a Unix
library function, like sendmsg() or recvmsg(), that will block too.

> Is what I think correct, and should the fcntl()'s simply go. Or should
> AsyncSelect() set the unix fd to non blocking instead?

I guess you need tests to confirm that calling WSAAsyncSelect causes a
socket to become nonblocking..
--Juan



More information about the wine-devel mailing list