Support for poll() (ie. WSAPoll()) on Windows

This commit is contained in:
2020-12-05 00:52:36 +01:00
parent 661061b4eb
commit 269315ca09
3 changed files with 8 additions and 5 deletions

View File

@@ -268,7 +268,7 @@ CNServer::CNServer(uint16_t p): port(p) {}
void CNServer::start() {
int nfds = 1, oldnfds;
struct pollfd fds[30]; // TODO: dynamically grow
PollFD fds[30]; // TODO: dynamically grow
memset(&fds, 0, sizeof(fds));
@@ -281,11 +281,11 @@ void CNServer::start() {
while (active) {
// the timeout is to ensure shard timers are ticking
//std::cout << "pre-poll\n";
int n = poll((struct pollfd *)&fds, nfds, 200);
int n = poll((PollFD*)&fds, nfds, 200);
//if (n > 0)
// std::cout << "poll returned " << n << std::endl;
if (n < 0) {
perror("poll");
if (SOCKETERROR(n)) {
std::cout << "[FATAL] poll() returned error" << std::endl;
terminate(0);
}

View File

@@ -17,6 +17,8 @@
#pragma comment(lib, "Ws2_32.lib")
typedef char buffer_t;
#define PollFD WSAPOLLFD
#define poll WSAPoll
#define OF_ERRNO WSAGetLastError()
#define OF_EWOULD WSAEWOULDBLOCK
#define SOCKETINVALID(x) (x == INVALID_SOCKET)
@@ -32,6 +34,7 @@
typedef int SOCKET;
typedef void buffer_t;
#define PollFD struct pollfd
#define OF_ERRNO errno
#define OF_EWOULD EWOULDBLOCK
#define SOCKETINVALID(x) (x < 0)