updates to thread / udt socket

This commit is contained in:
Daniel Larimer 2014-06-26 20:10:56 -04:00
parent 8670a4722f
commit d2072e9d3a
2 changed files with 18 additions and 10 deletions

View file

@ -175,6 +175,10 @@ namespace fc {
auto async( Functor&& f, const char* desc ="", priority prio = priority()) -> fc::future<decltype(f())> { auto async( Functor&& f, const char* desc ="", priority prio = priority()) -> fc::future<decltype(f())> {
return fc::thread::current().async( fc::forward<Functor>(f), desc, prio ); return fc::thread::current().async( fc::forward<Functor>(f), desc, prio );
} }
template<typename Functor>
auto schedule( Functor&& f, const fc::time_point& t, const char* desc ="", priority prio = priority()) -> fc::future<decltype(f())> {
return fc::thread::current().schedule( fc::forward<Functor>(f), t, desc, prio );
}
} // end namespace fc } // end namespace fc

View file

@ -11,6 +11,16 @@
namespace fc { namespace fc {
void check_udt_errors()
{
UDT::ERRORINFO& error_info = UDT::getlasterror();
if( error_info.getErrorCode() )
{
std::string error_message = error_info.getErrorMessage();
error_info.clear();
FC_CAPTURE_AND_THROW( udt_exception, (error_message) );
}
}
class udt_epoll_service class udt_epoll_service
{ {
@ -18,6 +28,8 @@ namespace fc {
udt_epoll_service() udt_epoll_service()
:_epoll_thread("udt_epoll") :_epoll_thread("udt_epoll")
{ {
UDT::startup();
check_udt_errors();
_epoll_id = UDT::epoll_create(); _epoll_id = UDT::epoll_create();
_epoll_loop = _epoll_thread.async( [=](){ poll_loop(); } ); _epoll_loop = _epoll_thread.async( [=](){ poll_loop(); } );
} }
@ -25,6 +37,8 @@ namespace fc {
~udt_epoll_service() ~udt_epoll_service()
{ {
_epoll_loop.cancel(); _epoll_loop.cancel();
_epoll_loop.wait();
UDT::cleanup();
} }
void poll_loop() void poll_loop()
@ -111,16 +125,6 @@ namespace fc {
} }
void check_udt_errors()
{
UDT::ERRORINFO& error_info = UDT::getlasterror();
if( error_info.getErrorCode() )
{
std::string error_message = error_info.getErrorMessage();
error_info.clear();
FC_CAPTURE_AND_THROW( udt_exception, (error_message) );
}
}
udt_socket::udt_socket() udt_socket::udt_socket()
:_udt_socket_id( UDT::INVALID_SOCK ) :_udt_socket_id( UDT::INVALID_SOCK )