{
int handle;
WSAEVENT hEventObject[2];
+ long events;
DWORD result, msec;
empth_t *pThread = TlsGetValue(dwTLSIndex);
int res;
handle = posix_fd2socket(fd);
CANT_HAPPEN(handle < 0);
- if (flags == EMPTH_FD_READ)
- WSAEventSelect(handle, hEventObject[0], FD_READ | FD_ACCEPT | FD_CLOSE);
- else if (flags == EMPTH_FD_WRITE)
- WSAEventSelect(handle, hEventObject[0], FD_WRITE | FD_CLOSE);
- else {
- logerror("bad flag %d passed to empth_select", flags);
- empth_exit();
- }
+ events = 0;
+ if (flags & EMPTH_FD_READ)
+ events |= FD_READ | FD_ACCEPT | FD_CLOSE;
+ if (flags & EMPTH_FD_WRITE)
+ events |= FD_WRITE | FD_CLOSE;
+ WSAEventSelect(handle, hEventObject[0], events);
if (timeout)
msec = timeout->tv_sec * 1000L + timeout->tv_usec / 1000L;
else
msec = WSA_INFINITE;
- result = WSAWaitForMultipleEvents(2, hEventObject, FALSE, msec,
- FALSE);
+ result = WSAWaitForMultipleEvents(2, hEventObject, FALSE, msec, FALSE);
switch (result) {
case WSA_WAIT_TIMEOUT:
int res = 0;
pthread_mutex_unlock(&mtx_ctxsw);
- empth_status("%s select on %d",
- flags == EMPTH_FD_READ ? "read" : "write", fd);
+ empth_status("select on %d for %d", fd, flags);
FD_ZERO(&readmask);
FD_ZERO(&writemask);
-
- switch (flags) {
- case EMPTH_FD_READ:
+ if (flags & EMPTH_FD_READ)
FD_SET(fd, &readmask);
- break;
- case EMPTH_FD_WRITE:
+ if (flags & EMPTH_FD_WRITE)
FD_SET(fd, &writemask);
- break;
- default:
- CANT_REACH();
- errno = EINVAL;
- res = -1;
- goto done;
- }
if (timeout) {
tv = *timeout;
res = 1;
}
-done:
pthread_mutex_lock(&mtx_ctxsw);
empth_restorectx();
return res;