Разъем многократного использования с boost asio - PullRequest
3 голосов
/ 08 декабря 2011

Я пытаюсь использовать boost asio socket, связанный с комбинацией локального адреса / порта. Это прекрасно работает. Что не работает, так это повторное использование сокета после того, как сокет и приложение были остановлены и перезапущены.

    //
    // open the socket - it would also be opened by the async_connect() 
    // method but we might need an open socket to bind it
    _socket.open(boost::asio::ip::tcp::v4());

    if ( _bindLocal ) {
        boost::asio::socket_base::reuse_address option(true);
        _socket.set_option(option);
        _socket.bind( _localEndpoint );
    }

    // Invoke async. connect. Immediate return, no throw.
    _socket.async_connect(_remoteEndpoint,
        boost::bind(&MyTransceiver::handleConnect, this,
            boost::asio::placeholders::error));

Чего мне не хватает? Правильный ли порядок вызовов open (), set_option () и bind ()?

1 Ответ

0 голосов
/ 08 декабря 2011

Код выглядит хорошо.Попробуйте использовать error_code, чтобы получить результат вашего вызова set_option ().

boost::system::error_code ec;
_socket.set_option(boost::asio::socket_base::reuse_address(true), ec);
...