我使用tcp :: socket :: connect方法连接了一个不存在的地址,并且按预期返回了WSAETIMEDOUT(10060)。但是为什么调用tcp :: socket :: is_open()返回1(true)?我认为它应该返回0(false),因为建立连接失败。
int main(int argc, char* argv[]) {
boost::asio::io_context context;
tcp::socket socket(context);
/*non-existent address 111.111.111.111:8080*/
tcp::endpoint endpoint(address::from_string("111.111.111.111"), 8080);
error_code result_error;
socket.connect(endpoint, result_error);
/* error code: WSAETIMEDOUT [10060]
* description: established connection failed because connected host has failed to respond
*/
std::cout << "error code: " << result_error.value()<< result_error.message() << std::endl;
/*returned 1*/
std::cout << "is_open returned: "<< socket.is_open() << std::endl;
}
我希望is_open的输出为0,但实际输出为1。
答案 0 :(得分:0)
is_open
函数仅检查套接字是否“打开”(open
函数已成功调用),而不检查套接字是否已连接。
简而言之,is_open
检查套接字创建状态,而不是套接字连接状态。
如果看到this old SO answer,它将告诉您不可能知道连接状态,并给出了解决方法(您自己保持连接状态)。