Browse code

bb#1892

aCaB authored on 2010/03/23 08:09:00
Showing 4 changed files
... ...
@@ -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
... ...
@@ -195,4 +195,4 @@ EXPORTS w32_stat @44331 NONAME
195 195
 EXPORTS w32_strerror @44332 NONAME
196 196
 EXPORTS w32_strerror_r @44333 NONAME
197 197
 EXPORTS inet_addr @44334 NONAME
198
-EXPORTS sock_set_nonblock @44335 NONAME
198
+EXPORTS fcntl @44335 NONAME