我有一个内置在write_some函数中的boost tcp ip套接字 接收器部分卡在死锁中(这是另一个未与tcp套接字链接的问题)。我仅在接收器线程中一直处于睡眠状态就成功模拟了这个问题。
即使我重新启动发送方,它也挂在同一行上
是否有一种方法可以设置超时,以防卡在此状态下重新启动连接?如果我使用async_write_some,这将是一个解决方案吗?
当我在发送方执行gstack时,我可以看到它卡在/lib64/libc.so.6对poll()的调用的write_some函数中。在下一行
socket->write_some(boost::asio::buffer(pData ,nLength, error);
发件人netstat,我看到netstat输出是fin_wait1并在某些情况下已建立(但代码仍停留在write_some中)
初始化发送方套接字
socket = boost::make_shared<boost::asio::ip::tcp::socket>(boost::asio::ip::tcp::socket(io_service,boost::asio::ip::tcp::endpoint,
boost::asio::ip::tcp::v4(),portNumber)))
// Set a deadline for the asynchronous operation.
boost::asio::deadline_timer pConnectTimer = ...;
pConnectTimer->expires_from_now(boost::posix_time::seconds(10));
boost::asio::socket_base::keep_alive option(true);
socket->set_option(option);
// Start the asynchronous connect itself.
socket->async_connect(endpoint,boost::bind(&CrXdrQueuetoSocket::ConnectCallback, this, std::ref(pi_xdrTarget),
socket,boost::asio::placeholders::error));
//Poll io service only one time
io_service .poll_one();