瀏覽代碼

Merge pull request #625 from paullouisageneau/reenable-websocket-ping

Re-enable WebSocket ping
Paul-Louis Ageneau 3 年之前
父節點
當前提交
9485fe7dc5
共有 2 個文件被更改,包括 7 次插入3 次删除
  1. 1 1
      src/impl/pollservice.cpp
  2. 6 2
      src/impl/tcptransport.cpp

+ 1 - 1
src/impl/pollservice.cpp

@@ -176,7 +176,7 @@ void PollService::runLoop() {
 				int timeout;
 				if (next) {
 					auto msecs = duration_cast<milliseconds>(
-					    std::max(clock::duration::zero(), *next - clock::now()));
+					    std::max(clock::duration::zero(), *next - clock::now() + 1ms));
 					PLOG_VERBOSE << "Entering poll, timeout=" << msecs.count() << "ms";
 					timeout = static_cast<int>(msecs.count());
 				} else {

+ 6 - 2
src/impl/tcptransport.cpp

@@ -247,8 +247,11 @@ void TcpTransport::prepare(const sockaddr *addr, socklen_t addrlen) {
 }
 
 void TcpTransport::setPoll(PollService::Direction direction) {
-	PollService::Instance().add(mSock,
-	                            {direction, nullopt, std::bind(&TcpTransport::process, this, _1)});
+	const auto timeout = 10s;
+	PollService::Instance().add(
+	    mSock,
+	    {direction, direction == PollService::Direction::In ? make_optional(timeout) : nullopt,
+	     std::bind(&TcpTransport::process, this, _1)});
 }
 
 void TcpTransport::close() {
@@ -315,6 +318,7 @@ void TcpTransport::process(PollService::Event event) {
 		case PollService::Event::Timeout: {
 			PLOG_VERBOSE << "TCP is idle";
 			incoming(make_message(0));
+			setPoll(PollService::Direction::In);
 			return;
 		}