diff --git a/Makefile.msvc b/Makefile.msvc index f2636be..508bb06 100644 --- a/Makefile.msvc +++ b/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 diff --git a/Makefile.msvc64 b/Makefile.msvc64 index fdbf35f..2f2f5cc 100644 --- a/Makefile.msvc64 +++ b/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 diff --git a/Makefile.msvcARM64 b/Makefile.msvcARM64 index a7c5586..9eb1e65 100644 --- a/Makefile.msvcARM64 +++ b/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 diff --git a/src/common.c b/src/common.c index 477fb8f..4594237 100644 --- a/src/common.c +++ b/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, diff --git a/src/sockmap.c b/src/sockmap.c index 4200e44..1952b20 100644 --- a/src/sockmap.c +++ b/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 diff --git a/src/structures.h b/src/structures.h index dbb1959..6436826 100644 --- a/src/structures.h +++ b/src/structures.h @@ -50,6 +50,11 @@ extern "C" { #ifdef WITH_POLL #include +#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