Эх сурвалжийг харах

Use WSAPoll on Windows (except lite version)

z3APA3A 7 жил өмнө
parent
commit
a42bb38d76

+ 1 - 1
Makefile.msvc

@@ -8,7 +8,7 @@
 
 BUILDDIR = ../bin/
 CC = cl
-CFLAGS = /nologo /MT /W3 /Ox /GS /EHs- /GA /GF /D "MSVC" /D "WITH_STD_MALLOC" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /D "PRINTF_INT64_MODIFIER=\"I64\"" /Fp"proxy.pch" /FD /c $(VERSION) $(BUILDDATE)
+CFLAGS = /nologo /MT /W3 /Ox /GS /EHs- /GA /GF /D "MSVC" /D "WITH_STD_MALLOC" /D "WITH_WSAPOLL" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /D "PRINTF_INT64_MODIFIER=\"I64\"" /Fp"proxy.pch" /FD /c $(VERSION) $(BUILDDATE)
 COUT = /Fo
 LN = link
 LDFLAGS =  /nologo /subsystem:console /incremental:no /machine:I386

+ 1 - 1
Makefile.msvc64

@@ -8,7 +8,7 @@
 
 BUILDDIR = ../bin64/
 CC = cl
-CFLAGS = /nologo /MT /W3 /Ox /EHs- /GS /GA /GF /D "MSVC" /D "WITH_STD_MALLOC" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /D "PRINTF_INT64_MODIFIER=\"I64\"" /Fp"proxy.pch" /FD /c $(VERSION) $(BUILDDATE)
+CFLAGS = /nologo /MT /W3 /Ox /EHs- /GS /GA /GF /D "MSVC" /D "WITH_STD_MALLOC" /D "WITH_WSAPOLL" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /D "PRINTF_INT64_MODIFIER=\"I64\"" /Fp"proxy.pch" /FD /c $(VERSION) $(BUILDDATE)
 COUT = /Fo
 LN = link
 LDFLAGS = /nologo /subsystem:console /incremental:no /machine:x64

+ 1 - 1
Makefile.msvcARM64

@@ -8,7 +8,7 @@
 
 BUILDDIR = ../bin64/
 CC = cl
-CFLAGS = /nologo /MT /W3 /Ox /EHs- /GS /GA /GF /D "MSVC" /D "WITH_STD_MALLOC" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /D "PRINTF_INT64_MODIFIER=\"I64\"" /Fp"proxy.pch" /FD /c $(VERSION) $(BUILDDATE)
+CFLAGS = /nologo /MT /W3 /Ox /EHs- /GS /GA /GF /D "MSVC" /D "WITH_STD_MALLOC" /D "WITH_WSAPOLL" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /D "PRINTF_INT64_MODIFIER=\"I64\"" /Fp"proxy.pch" /FD /c $(VERSION) $(BUILDDATE)
 COUT = /Fo
 LN = link
 LDFLAGS = /nologo /subsystem:console /incremental:no /machine:arm64

+ 9 - 3
src/common.c

@@ -122,6 +122,7 @@ int myrand(void * entropy, int len){
 }
 
 #ifndef WITH_POLL
+#ifndef WITH_WSAPOLL
 int  
 #ifdef _WIN32
  WINAPI
@@ -157,6 +158,7 @@ int
 	return num;
 }
 #endif
+#endif
 
 struct sockfuncs so = {
 	socket,
@@ -168,10 +170,14 @@ struct sockfuncs so = {
 	getsockname,
 	getsockopt,
 	setsockopt,
-#ifdef WITH_POLL
-	poll,
-#else
+#ifndef WITH_POLL
+#ifndef WITH_WSAPOLL
 	mypoll,
+#else
+	WSAPoll,
+#endif
+#else
+	poll,
 #endif
 	(void *)send,
 	(void *)sendto,

+ 30 - 6
src/sockmap.c

@@ -116,12 +116,20 @@ int splicemap(struct clientparam * param, int timeo){
     if(res < 1){
 	RETURN(92);
     }
-    if( (fds[0].revents & (POLLERR|POLLHUP|POLLNVAL)) && !(fds[0].revents & POLLIN)) {
+    if( (fds[0].revents & (POLLERR|POLLNVAL
+#ifndef WITH_WSAPOLL
+		|POLLHUP
+#endif
+			)) && !(fds[0].revents & POLLIN)) {
 	fds[0].revents = 0;
 	stop = 1;
 	param->res = 90;
     }
-    if( (fds[1].revents & (POLLERR|POLLHUP|POLLNVAL)) && !(fds[1].revents & POLLIN)){
+    if( (fds[1].revents & (POLLERR|POLLNVAL
+#ifndef WITH_WSAPOLL
+		|POLLHUP
+#endif
+			)) && !(fds[1].revents & POLLIN)){
 	fds[1].revents = 0;
 	stop = 1;
 	param->res = 90;
@@ -402,12 +410,20 @@ int sockmap(struct clientparam * param, int timeo){
 	if(res < 1){
 		return 92;
 	}
-	if( (fds[0].revents & (POLLERR|POLLHUP|POLLNVAL)) && !(fds[0].revents & POLLIN)) {
+	if( (fds[0].revents & (POLLERR|POLLNVAL
+#ifndef WITH_WSAPOLL
+					|POLLHUP
+#endif
+						)) && !(fds[0].revents & POLLIN)) {
 		fds[0].revents = 0;
 		stop = 1;
 		retcode = 90;
 	}
-	if( (fds[1].revents & (POLLERR|POLLHUP|POLLNVAL)) && !(fds[1].revents & POLLIN)){
+	if( (fds[1].revents & (POLLERR|POLLNVAL
+#ifndef WITH_WSAPOLL
+					|POLLHUP
+#endif
+						)) && !(fds[1].revents & POLLIN)){
 		fds[1].revents = 0;
 		stop = 1;
 		retcode = 90;
@@ -460,7 +476,11 @@ int sockmap(struct clientparam * param, int timeo){
 			return (99);
 		}
 	}
-	if ((fds[0].revents & POLLIN)) {
+	if ((fds[0].revents & POLLIN)
+#ifdef WITH_WSAPOLL
+		||(fds[0].revents & POLLHUP)
+#endif
+					) {
 #if DEBUGLEVEL > 2
 (*param->srv->logfunc)(param, "recv from client");
 #endif
@@ -488,7 +508,11 @@ int sockmap(struct clientparam * param, int timeo){
 
 		}
 	}
-	if (!stop && (fds[1].revents & POLLIN)) {
+	if (!stop && ((fds[1].revents & POLLIN)
+#ifdef WITH_WSAPOLL
+		||(fds[1].revents & POLLHUP)
+#endif
+						)) {
 #ifdef NOIPV6
 		struct sockaddr_in sin;
 #else

+ 6 - 1
src/structures.h

@@ -50,6 +50,11 @@ extern "C" {
 
 #ifdef WITH_POLL
 #include <poll.h>
+#else
+#ifdef WITH_WSAPOLL
+
+#define poll(A,B,C) WSAPoll(A,B,C)
+
 #else
 struct mypollfd {
  SOCKET    fd;       /* file descriptor */
@@ -80,7 +85,7 @@ int
 #ifndef POLLNVAL
 #define POLLNVAL 32
 #endif
-
+#endif
 #endif