LINUX.ORG.RU

[кроссплатформенность]bind не возвращает EADDRINUSE

 


0

1

Примерно такой код:

    boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::address(), port);
    m_acceptor.open(endpoint.protocol());
    m_acceptor.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true));

    boost::system::error_code ec;
    m_acceptor.bind(endpoint, ec);
    if( EADDRINUSE == ec.value() )
    {
        ...
    }
Под линуксом при повторном вызове попадает в if. Под офтопиком он этого делать не хочет.

В интернетах накопал, что в случае INADDR_ANY оно по идее может и в listen вывалиться. Ничего подобного. Пробовал указывать локалхост - ноль эмоций. Убирать опцию reuse_address тоже.

Какие еще варианты могут быть?

PS. еще кто-то описывал странную проблему: EADDRINUSE на 100500 + 1 итерации чтения/записи происходит. Если такое действительно возможно, то может быть можно как-то еще определить под виндой, что порт уже забинден?

★★

Ответ на: комментарий от yoghurt

Спасибо! Вот так всегда: ЛОР подумал за меня о том, о чем я сам забыл подумать.

Вернулось 10048 - пойду смотреть, что это такое.

kulti ★★
() автор топика
Ответ на: комментарий от Jetty

Тема помечена как решенная, что как бы намекает - я уже понял =) Но все равно спасибо за участие.

kulti ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.