send(2) does not return ETIMEDOUT for a blocking socket with a write
timeout set, which causes the wrong error code to be reported to the
managed world.
Fixes bug #599488.
g_message ("%s: send error: %s", __func__, strerror (errno));
#endif
+ /* At least linux returns EAGAIN/EWOULDBLOCK when the timeout has been set on
+ * a blocking socket. See bug #599488 */
+ if (errnum == EAGAIN) {
+ gboolean nonblock;
+
+ ret = ioctlsocket (fd, FIONBIO, (gulong *) &nonblock);
+ if (ret != SOCKET_ERROR && !nonblock)
+ errnum = ETIMEDOUT;
+ }
errnum = errno_to_WSA (errnum, __func__);
WSASetLastError (errnum);