... | ... |
@@ -387,10 +387,6 @@ static void *acceptloop_th(void *arg) |
387 | 387 |
|
388 | 388 |
if (new_sd >= 0) { |
389 | 389 |
int ret, flags; |
390 |
-#ifdef _WIN32 |
|
391 |
- if(sock_set_nonblock(new_sd)) |
|
392 |
- logg("^Can't set socket to nonblocking mode, errno %d\n", errno); |
|
393 |
-#else |
|
394 | 390 |
#ifdef F_GETFL |
395 | 391 |
flags = fcntl(new_sd, F_GETFL, 0); |
396 | 392 |
if (flags != -1) { |
... | ... |
@@ -404,7 +400,6 @@ static void *acceptloop_th(void *arg) |
404 | 404 |
#else |
405 | 405 |
logg("^Nonblocking sockets not available!\n"); |
406 | 406 |
#endif |
407 |
-#endif |
|
408 | 407 |
logg("$Got new connection, FD %d\n", new_sd); |
409 | 408 |
pthread_mutex_lock(recv_fds->buf_mutex); |
410 | 409 |
ret = fds_add(recv_fds, new_sd, 0, commandtimeout); |
... | ... |
@@ -350,15 +350,6 @@ int w32_shutdown(int sockfd, int how) { |
350 | 350 |
return 0; |
351 | 351 |
} |
352 | 352 |
|
353 |
-int sock_set_nonblock(int sockfd) { |
|
354 |
- u_long arg = 1; |
|
355 |
- if(ioctlsocket((SOCKET)sockfd, FIONBIO, &arg)) { |
|
356 |
- wsock2errno(); |
|
357 |
- return -1; |
|
358 |
- } |
|
359 |
- return 0; |
|
360 |
-} |
|
361 |
- |
|
362 | 353 |
struct w32polldata { |
363 | 354 |
HANDLE setme; |
364 | 355 |
HANDLE event; |
... | ... |
@@ -459,3 +450,21 @@ int poll_with_event(struct pollfd *fds, int nfds, int timeout, HANDLE event) { |
459 | 459 |
free(setme); |
460 | 460 |
return ret; |
461 | 461 |
} |
462 |
+ |
|
463 |
+int fcntl(int fd, int cmd, ...) { |
|
464 |
+ va_list ap; |
|
465 |
+ va_start(ap, cmd); |
|
466 |
+ |
|
467 |
+ if(cmd == F_GETFL) |
|
468 |
+ return 0; |
|
469 |
+ if(cmd == F_SETFL) { |
|
470 |
+ u_long arg = va_arg(ap, long) == O_NONBLOCK; |
|
471 |
+ if(ioctlsocket((SOCKET)fd, FIONBIO, &arg)) { |
|
472 |
+ wsock2errno(); |
|
473 |
+ return -1; |
|
474 |
+ } |
|
475 |
+ return 0; |
|
476 |
+ } |
|
477 |
+ return -1; |
|
478 |
+} |
|
479 |
+ |
... | ... |
@@ -24,6 +24,10 @@ |
24 | 24 |
typedef int socklen_t; |
25 | 25 |
typedef int ssize_t; |
26 | 26 |
|
27 |
+#define F_GETFL 1 |
|
28 |
+#define F_SETFL 2 |
|
29 |
+#define O_NONBLOCK 1 |
|
30 |
+ |
|
27 | 31 |
int w32_socket(int domain, int type, int protocol); |
28 | 32 |
int w32_getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen); |
29 | 33 |
int w32_setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen); |
... | ... |
@@ -43,6 +47,6 @@ int poll_with_event(struct pollfd *fds, int nfds, int timeout, HANDLE event); |
43 | 43 |
int w32_accept(SOCKET sockfd, const struct sockaddr *addr, socklen_t *addrlen); |
44 | 44 |
int w32_listen(int sockfd, int backlog); |
45 | 45 |
int w32_shutdown(int sockfd, int how); |
46 |
-int sock_set_nonblock(int sockfd); |
|
46 |
+int fcntl(int fd, int cmd, ...); |
|
47 | 47 |
|
48 | 48 |
#endif |