У меня есть сокет TCP, который я хочу привязать к локальной конечной точке.
У меня есть 2 сценария:
- Подключение сокета к локальной конечной точке, которая не используется и не ожидает подключения.
- Подключение сокета к локальной конечной точке, которая использовалась/не была должным образом закрыта при предыдущем запуске.
Раньше я инициализировал акцептор, используя его конструктор, передавая ему io_service и конечную точку, но когда он пытался подключиться к используемой конечной точке, акцептор давал сбой.
acceptor_(io_service_, endpoint)
Следующее, что я сделал, это изменил конструктор, чтобы получить только io_service (который обещает, что сокет не будет открыт).
acceptor_(io_service_)
Я видел, что в asio есть функция bind(), которая связывает сокет с локальной конечной точкой. Функция bind() имеет параметр, указывающий, произошла ли ошибка, но для обоих описанных выше сценариев она возвращает одну и ту же ошибку.
boost::system::error_code ec;
acceptor_.bind(endpoint, ec);
if(ec)
{
// SOME ERROR NOTIFYING
// EDIT: error code returned is 10009
}
Есть ли способ подключиться к конечной точке и получить разные ошибки для этих типов ошибок?