c++ - 如何检查套接字是否已连接

标签 c++ c++11 visual-c++

我正在使用这段代码发送从该站点获得的套接字命令。

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/

相关文章:

c++ - 为什么 C++ 中的数组在 C++11 之前没有成员函数 size()?

c++ - 将临时 std::shared_ptr 插入到 std::map 中,这不好吗?

json - 用于 C++ 的简单 JSON 解析器/生成器 (Windows VS 2010)

c++ - 是否有在 Openg GL 中使用混合的 glCopyImageSubData 版本?

c++ - C++中的反向双向链表

android - 如何将 android 的 boost 构建为支持 c++11 的共享库

使用 Visual Studio 2012 编译 C 应用程序

c++ - G++ 如何在 Linux 服务器上为 FreeBSD 编译

c++ - 如何使用 shared_ptr 确保指针存在?

c++ - 附加控制台 I/O 的 Visual Studio 2015 问题