diff --git a/ixwebsocket/IXSocket.cpp b/ixwebsocket/IXSocket.cpp index 7ee9bc1c..c55a6814 100644 --- a/ixwebsocket/IXSocket.cpp +++ b/ixwebsocket/IXSocket.cpp @@ -52,10 +52,11 @@ namespace ix PollResultType Socket::poll(bool readyToRead, int timeoutMs, int sockfd, - const SelectInterruptPtr& selectInterrupt) + const SelectInterruptPtr& selectInterrupt, + int kqueuefd) { #if defined(__APPLE__) - int kqueuefd = kqueue(); + // FIXME int kqueuefd = kqueue(); struct kevent ke; EV_SET(&ke, sockfd, (readyToRead) ? EVFILT_READ : EVFILT_WRITE, EV_ADD, 0, 0, NULL); @@ -145,7 +146,8 @@ namespace ix #endif free(events); - ::close(kqueuefd); + + // ::close(kqueuefd); //FMXE return pollResult; #else @@ -254,7 +256,7 @@ namespace ix } bool readyToRead = true; - return poll(readyToRead, timeoutMs, _sockfd, _selectInterrupt); + return poll(readyToRead, timeoutMs, _sockfd, _selectInterrupt, _kqueuefd); } PollResultType Socket::isReadyToWrite(int timeoutMs) @@ -265,7 +267,7 @@ namespace ix } bool readyToRead = false; - return poll(readyToRead, timeoutMs, _sockfd, _selectInterrupt); + return poll(readyToRead, timeoutMs, _sockfd, _selectInterrupt, _kqueuefd); } // Wake up from poll/select by writing to the pipe which is watched by select diff --git a/ixwebsocket/IXSocket.h b/ixwebsocket/IXSocket.h index ff131c00..7f7c1e8b 100644 --- a/ixwebsocket/IXSocket.h +++ b/ixwebsocket/IXSocket.h @@ -101,7 +101,8 @@ namespace ix static PollResultType poll(bool readyToRead, int timeoutMs, int sockfd, - const SelectInterruptPtr& selectInterrupt); + const SelectInterruptPtr& selectInterrupt, + int kqueuefd); // Used as special codes for pipe communication diff --git a/ixwebsocket/IXSocketConnect.cpp b/ixwebsocket/IXSocketConnect.cpp index fea01897..9732d427 100644 --- a/ixwebsocket/IXSocketConnect.cpp +++ b/ixwebsocket/IXSocketConnect.cpp @@ -66,7 +66,10 @@ namespace ix int timeoutMs = 10; bool readyToRead = false; auto selectInterrupt = std::make_unique(); - PollResultType pollResult = Socket::poll(readyToRead, timeoutMs, fd, selectInterrupt); + + int kqueuefd = kqueue(); + PollResultType pollResult = Socket::poll(readyToRead, timeoutMs, fd, selectInterrupt, kqueuefd); + ::close(kqueuefd); if (pollResult == PollResultType::Timeout) { diff --git a/ixwebsocket/IXSocketServer.cpp b/ixwebsocket/IXSocketServer.cpp index 6c33420b..8e7c1d87 100644 --- a/ixwebsocket/IXSocketServer.cpp +++ b/ixwebsocket/IXSocketServer.cpp @@ -259,8 +259,11 @@ namespace ix int timeoutMs = 10; bool readyToRead = true; auto selectInterrupt = std::make_unique(); + + int kqueuefd = kqueue(); PollResultType pollResult = - Socket::poll(readyToRead, timeoutMs, _serverFd, selectInterrupt); + Socket::poll(readyToRead, timeoutMs, _serverFd, selectInterrupt, kqueuefd); + ::close(kqueuefd); if (pollResult == PollResultType::Error) {