Use WSAPoll on Windows (except lite version)

This commit is contained in:
z3APA3A 2018-04-21 23:57:42 +03:00
parent db485dd4c4
commit a42bb38d76
6 changed files with 48 additions and 13 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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,

View File

@ -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

View File

@ -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