2013-06-28 10 views
7

Chcę wykonać następujące czynności z Boost Asio. Mam gniazdo i chcę zarejestrować wywołanie zwrotne, które ma zostać wywołane, gdy dane są dostępne do odczytu/zapisu na gnieździe, ale nie chcę, aby faktycznie wykonywał odczyt/zapis. Zasadniczo to, czego potrzebuję, jest podobne do async_read_some/async_write_some, z wyjątkiem tego, że rzeczywiste odczytywanie i zapisywanie nie jest wykonywane.Asynchronicznie oczekiwanie, aż gniazdo będzie dostępne do odczytu/zapisu w Asio

Potrzebuję tego, ponieważ używam biblioteki zewnętrznej z własną funkcją odczytu i zapisu, która wymaga parametru deskryptora gniazda jako parametru wejściowego i chcę korzystać z tej biblioteki w sposób asynchroniczny.

+0

Czy chcesz kod, który za pomocą async_connect, async_write, async_read? – mattn

+0

Tylko async_read i async_write. Sam mogę połączyć się, ponieważ biblioteka korzysta z gniazd z już ustanowionych połączeń, więc mogę sam używać async_connect. – petersohn

Odpowiedz

8

Szukasz operacji w stylu reaktora. Można je uzyskać, przekazując boost::asio::null_buffers do operacji asynchronicznych. Operacje reaktor stylu mogą być użyteczne do integracji z bibliotek zewnętrznych, za pomocą współużytkowanych pul pamięci, itp Boost.Asio documentation zawiera pewne informacje i następujący przykładowy kod:

ip::tcp::socket socket(my_io_service); 
... 
socket.non_blocking(true); 
... 
socket.async_read_some(null_buffers(), read_handler); 
... 
void read_handler(boost::system::error_code ec) 
{ 
    if (!ec) 
    { 
    std::vector<char> buf(socket.available()); 
    socket.read_some(buffer(buf)); 
    } 
} 

Boost.Asio zapewnia również oficjalne nonblocking example , ilustrujący sposób integracji z bibliotekami, które chcą wykonywać operacje odczytu i zapisu bezpośrednio na gnieździe.

+0

'null_buffers' jest przestarzałe od Boost 1.66.0: [_" (przestarzałe: Użyj funkcji członkowskich socket/descriptor wait() i async \ _wait().) "_] (Http://www.boost.org /doc/libs/1_66_0/doc/html/boost_asio/reference/null_buffers.html) – sehe

Powiązane problemy