在Poco c++库中发送调用在运行一段时间后在Windows上不返回
Send call inside Poco C++ library not returning on Windows after running for some time
我必须连接一个Socket。io 0.9服务器(出于遗留兼容性原因)从我的c++代码。套接字。io-poco似乎是唯一提供此功能的库,因此我决定冒险引入Poco来支持此功能。大多数事情都是有效的,直到它们失效。
我的进程似乎在send
呼叫上停滞不前。cpp内部的调用不会返回,但是需要大约半小时的断开连接的执行才能达到该状态。我不确定如何防止和/或从程序进入这种糟糕的状态恢复。
程序在Windows 2012 R2上执行。它连接到服务器并成功进行会话,但连接可能会变得不稳定。我会回来,服务将不可见的服务器有时。这可能需要几个小时或几天的时间。我的测试场景是人为地断开服务器连接,看看会发生什么。这通常会导致程序在大约半小时内进入不返回状态。
对于如何缓解或解决这个问题有什么想法吗?
- 一个不同的c++库,能够使用Socket。io 0.9 x
- 我可以对陈旧的套接字做些什么。io-poco代码使其更具防御性
- 猜猜我或中间的任何层搞砸了什么?
- 还有其他想法吗?
我决定我需要更多地了解Winsock,所以我找到了一个指南。这告诉我要考虑SO_SNDTIMEO
和setsockopt
的关系。在搜索SocketImpl.html后,我找到了setSendTimeout
,并发现我可以在套接字中调用它。使用WebSocket调用io-poco。
然后我只需要捕获异常并在超时发生时调用新的reconnect
函数:
void SIOClientImpl::reconnect() {
// Disconnect
_heartbeatTimer->stop();
_ws->close();
// Connect
if((handshake(_queryArgs)) && (openSocket())) {
connectToEndpoint(_uri.getPath());
} else {
Poco::Thread::sleep(100);
}
}
我不知道该希望什么:这个答案是有帮助的,还是没有其他人需要尝试做这个!
相关文章:
- 在做一段时间内检查字符的无限循环
- ExtTextOut 文本的持续闪烁,在一段时间后,文本将恢复为默认字体
- 对于等待以 std::future wait() 返回的函数的 CPU 使用率或检查标志在循环中休眠一段时间哪个更好?
- ::grpc::ServerReaderWriter 对象在另一个线程中一段时间后无法调用
- 一段时间后 CPU 使用率高
- 有没有办法在一段时间后将流程从流出中分离出来
- 在一段时间内更改标签文本
- 布尔函数在一段时间内不起作用
- 解决PNP在一段时间后返回坏的rvec和tvec
- 相机的旋转方向在一段时间后反转
- boost::asio::d eadline_timer 1ms 滞后一段时间
- SDL_Mixer再次播放时,从随机位置开始一段时间,然后从头开始
- 您可以在一段时间内迭代向量
- 列表STL的时间复杂性在一段时间内进行排序
- 我的开关菜单在一段时间循环中出现问题
- 如何在一段时间内更新 QLabel?
- 我可以在开关(消息)语句的同时运行一段时间吗?(C )
- Windows API:为什么按钮悬停效果会在一段时间后卡住
- 套接字编程中的Select在windows中会挂起一段时间
- 在Poco c++库中发送调用在运行一段时间后在Windows上不返回