Discussion:
[Ikvm-developers] Fixed missing error code handling for winsock
Martin Gerhardy
2016-11-28 11:34:24 UTC
Permalink
Compared to the SocketChannelImpl::read this should fix issues with two winsock error codes. One is the interrupt signal and one is wouldblock signal

compare also against the openjdk code for bsd sockets: (NET_Read in linux_close.c)

/*
* Macro to perform a blocking IO operation. Restarts
* automatically if interrupted by signal (other than
* our wakeup signal)
*/
#define BLOCKING_IO_RETURN_INT(FD, FUNC) { \
int ret; \
threadEntry_t self; \
fdEntry_t *fdEntry = getFdEntry(FD); \
if (fdEntry == NULL) { \
errno = EBADF; \
return -1; \
} \
do { \
startOp(fdEntry, &self); \
ret = FUNC; \
endOp(fdEntry, &self); \
} while (ret == -1 && errno == EINTR); \
return ret; \
}

the Winsock code is now doing the same.

Regards
Martin

Loading...