我正在使用这段代码发送从该站点获得的套接字命令。
void SendExternalCommand(std::string Cmd,const std::string HostName,const int Port)
{
boost::asio::io_service io;
boost::asio::ip::tcp::socket socket(io);
boost::asio::ip::tcp::endpoint
e(boost::asio::ip::address::from_string(HostName), Port);
socket.open(boost::asio::ip::tcp::v4());
socket.connect(e) ;
socket.write_some(boost::asio::buffer(Cmd));
socket.send(boost::asio::buffer(Cmd));
}
如何检查套接字是否可用。
我尝试做 if(!socket.open(boost::asio::ip::tcp::v4())) 但它不起作用。
最佳答案
boost::asio::ip::tcp::socket
有一个 is_open()
方法似乎给出了结果。
但是,您应该知道在调用 is_open
和使用 send
发送数据之间,可以关闭套接字。此外,TCP 写函数通常在将数据复制到内核缓冲区后立即返回。如果发送失败,下次发送时会报错。
一般来说,从套接字读取也是一个好主意,因为这是检测关闭连接的可靠方法。作为关闭过程的一部分,当客户端关闭连接时,对 recv
的调用将返回 0
的结果。我不知道 boost::asio 实现了什么,所以最好查看文档。
关于c++ - 如何检查套接字是否已连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33295377/