Почему метод tcp :: socket :: is_open () возвращает true при подключении к несуществующему адресу? - PullRequest
0 голосов
/ 27 мая 2019

Я подключил несуществующий адрес, используя метод tcp :: socket :: connect, и он вернул WSAETIMEDOUT (10060), как и ожидалось. Но почему вызов tcp :: socket :: is_open () вернул 1 (true)? Я думаю, что он должен вернуть 0 (ложь), потому что не удалось установить соединение.

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.

1 Ответ

0 голосов
/ 27 мая 2019

Функция is_open просто проверяет, является ли сокет «открытым» (функция open была успешно вызвана), а не если сокет подключен.

Короче, is_open проверяет состояние создания сокета, а не статус подключения сокета.

Если вы видите этот старый ответ SO , он сообщит вам, что невозможно узнать состояние подключения, а также выдастОбходной путь (сохраняйте статус соединения самостоятельно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...