2011-08-02 8 views
1

以下のコードでは、Windows WinSockのエラーWSAEINTR = 10004を汎用のブーストシステムエラーコードに置き換えたいのですが、デバッガで見つかったコードを汎用の列挙型にマップするにはどうすればよいですか?Windowsシステムのエラーコードをboost :: error_conditionにマップするにはどうすればよいですか?

timeout_.expires_from_now(posix_time::seconds(15)); 
timeout_.async_wait(boost::bind(&cancel_socket_fn,this,_1)); 
asio::streambuf rd_buf; 
unsigned length = read_until(socket_, rd_buf,delimiter_string, error); 
timeout_.cancel(); 

if(error) 
{ 
    // how do I make this portable? 
    if(error.value()==WSAEINTR) throw request_timeout_exception() 
    else throw my_asio_exception(error,"Unable to read header"); 
} 

...

cancel_socket_fn(system::error_code e) { socket_.cancel(); } 

答えて

0

(エラーが==ブースト:: ASIO ::エラー::中断)...

そして、私はここだと思うが、もしので、設計誤差がある場合このコードは、io_service :: run()(または同様のもの)が呼び出されたスレッドから呼び出され、read_until()が終了するまでcancel_socket_fn()は呼び出されません。または、スレッドが異なるスレッドにある場合、タイマーメソッドはスレッドセーフではないため、ここでは同期の問題があります。

関連する問題