voglio fare lettura asincrono da cin quindi ho un pezzo di codiceStrano eccezione tiro - assegnare: Operation not permitted
client.h
...
boost::asio::posix::stream_descriptor input;
boost::asio::streambuf input_buffer
client.cpp
Client::Client(int argc, char **argv, boost::asio::io_service &io_service)
: tcp_socket(io_service)
, udp_socket(io_service)
, input(io_service, ::dup(STDIN_FILENO))
{
...
read_std_input();
}
void Client::read_std_input() {
async_read_until(input, input_buffer, '\n',
boost::bind(&Client::handle_std_read, this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
}
Il problema è: quando eseguo il mio client nel modo normale [./client] e poi inserisco qualcosa via comando, funziona come un incantesimo. Tuttavia, quando l'eseguo tramite [./client < prova] getta:
Termina chiamata dopo aver lanciato un'istanza di 'boost :: :: exception_detail clone_impl
' quello che() : assegnare: Operation not permitted interrotta
hai un'idea di che cosa il problema potrebbe essere? Grazie!
Non hai menzionato quale piattaforma stai usando. Il supporto per I/O file asincroni è molto diverso su Windows e Linux (e ....) –
im usando linux mint 16 64bit – darenn
Dai un'occhiata a strace per vedere cosa potrebbe lamentare syscall. – sehe