提升tcp套接字卡在write_some中

时间:2019-09-09 09:51:00

标签: tcp boost-asio

我有一个内置在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 enter image description here

发件人netstat,我看到netstat输出是fin_wait1并在某些情况下已建立(但代码仍停留在write_some中)

enter image description here

初始化发送方套接字

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(); 

0 个答案:

没有答案