Примерно такой код:
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() )
{
...
}
В интернетах накопал, что в случае INADDR_ANY оно по идее может и в listen вывалиться. Ничего подобного. Пробовал указывать локалхост - ноль эмоций. Убирать опцию reuse_address тоже.
Какие еще варианты могут быть?
PS. еще кто-то описывал странную проблему: EADDRINUSE на 100500 + 1 итерации чтения/записи происходит. Если такое действительно возможно, то может быть можно как-то еще определить под виндой, что порт уже забинден?