Browse Source

Merge pull request #976 from paullouisageneau/fix-unexpected-pollin-macos

Fix unexpected POLLHUP event on connection failure on MacOS
Paul-Louis Ageneau 2 years ago
parent
commit
b1d4e3c3ae
2 changed files with 4 additions and 1 deletions
  1. 3 1
      src/impl/pollservice.cpp
  2. 1 0
      test/websocketserver.cpp

+ 3 - 1
src/impl/pollservice.cpp

@@ -118,7 +118,9 @@ void PollService::process(std::vector<struct pollfd> &pfds) {
 				auto &entry = jt->second;
 				const auto &params = entry.params;
 
-				if (it->revents & POLLNVAL || it->revents & POLLERR) {
+				if (it->revents & POLLNVAL || it->revents & POLLERR ||
+				    (it->revents & POLLHUP &&
+				     !(it->events & POLLIN))) { // MacOS sets POLLHUP on connection failure
 					PLOG_VERBOSE << "Poll error event";
 					auto callback = std::move(params.callback);
 					mSocks->erase(sock);

+ 1 - 0
test/websocketserver.cpp

@@ -31,6 +31,7 @@ void test_websocketserver() {
 	serverConfig.enableTls = true;
 	// serverConfig.certificatePemFile = ...
 	// serverConfig.keyPemFile = ...
+	serverConfig.bindAddress = "127.0.0.1"; // to test IPv4 fallback
 	WebSocketServer server(std::move(serverConfig));
 
 	shared_ptr<WebSocket> client;