开发者

How do I map Windows System error codes to boost::error_condition?

开发者 https://www.devze.com 2023-03-25 18:51 出处:网络
In the code below I would like to replace Windows WinSock error WSAEINTR=10004 with a generic boost system error code, but how do I map the code I found in the debugger, with the generic enums?

In the code below I would like to replace Windows WinSock error WSAEINTR=10004 with a generic boost system error code, but how do I map the code I found in the debugger, with the generic enums?

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(); }


if (error == boost::asio::error::interrupted)...

And I think here is a design error because if this code is called from the thread where io_service::run() (or similar) is called then cancel_socket_fn() will not be called until read_until() finishes. Or if they are in different threads then here are synchronization problems because timer methods are not thread-safe.

0

精彩评论

暂无评论...
验证码 换一张
取 消