1313
1414#include " src/detail/epoll/scheduler.hpp"
1515#include " src/detail/epoll/op.hpp"
16+ #include " src/detail/make_err.hpp"
1617
1718#include < boost/corosio/detail/except.hpp>
1819#include < boost/capy/core/thread_local_ptr.hpp>
@@ -73,18 +74,14 @@ epoll_scheduler(
7374{
7475 epoll_fd_ = ::epoll_create1 (EPOLL_CLOEXEC );
7576 if (epoll_fd_ < 0 )
76- detail::throw_system_error (
77- system::error_code (errno, system::system_category ()),
78- " epoll_create1" );
77+ detail::throw_system_error (make_err (errno), " epoll_create1" );
7978
8079 event_fd_ = ::eventfd (0 , EFD_NONBLOCK | EFD_CLOEXEC );
8180 if (event_fd_ < 0 )
8281 {
83- int err = errno;
82+ int errn = errno;
8483 ::close (epoll_fd_);
85- detail::throw_system_error (
86- system::error_code (err, system::system_category ()),
87- " eventfd" );
84+ detail::throw_system_error (make_err (errn), " eventfd" );
8885 }
8986
9087 // data.ptr = nullptr distinguishes wakeup events from I/O completions
@@ -93,12 +90,10 @@ epoll_scheduler(
9390 ev.data .ptr = nullptr ;
9491 if (::epoll_ctl (epoll_fd_, EPOLL_CTL_ADD , event_fd_, &ev) < 0 )
9592 {
96- int err = errno;
93+ int errn = errno;
9794 ::close (event_fd_);
9895 ::close (epoll_fd_);
99- detail::throw_system_error (
100- system::error_code (err, system::system_category ()),
101- " epoll_ctl" );
96+ detail::throw_system_error (make_err (errn), " epoll_ctl" );
10297 }
10398
10499 timer_svc_ = &get_timer_service (ctx, *this );
@@ -344,11 +339,7 @@ register_fd(int fd, epoll_op* op, std::uint32_t events) const
344339 ev.events = events;
345340 ev.data .ptr = op;
346341 if (::epoll_ctl (epoll_fd_, EPOLL_CTL_ADD , fd, &ev) < 0 )
347- {
348- detail::throw_system_error (
349- system::error_code (errno, system::system_category ()),
350- " epoll_ctl ADD" );
351- }
342+ detail::throw_system_error (make_err (errno), " epoll_ctl ADD" );
352343}
353344
354345void
@@ -359,11 +350,7 @@ modify_fd(int fd, epoll_op* op, std::uint32_t events) const
359350 ev.events = events;
360351 ev.data .ptr = op;
361352 if (::epoll_ctl (epoll_fd_, EPOLL_CTL_MOD , fd, &ev) < 0 )
362- {
363- detail::throw_system_error (
364- system::error_code (errno, system::system_category ()),
365- " epoll_ctl MOD" );
366- }
353+ detail::throw_system_error (make_err (errno), " epoll_ctl MOD" );
367354}
368355
369356void
@@ -477,9 +464,7 @@ do_one(long timeout_us)
477464 continue ;
478465 return 0 ;
479466 }
480- detail::throw_system_error (
481- system::error_code (errno, system::system_category ()),
482- " epoll_wait" );
467+ detail::throw_system_error (make_err (errno), " epoll_wait" );
483468 }
484469
485470 // May dispatch timer handlers inline
@@ -502,13 +487,13 @@ do_one(long timeout_us)
502487
503488 if (events[i].events & (EPOLLERR | EPOLLHUP ))
504489 {
505- int err = 0 ;
506- socklen_t len = sizeof (err );
507- if (::getsockopt (op->fd , SOL_SOCKET , SO_ERROR , &err , &len) < 0 )
508- err = errno;
509- if (err == 0 )
510- err = EIO ;
511- op->complete (err , 0 );
490+ int errn = 0 ;
491+ socklen_t len = sizeof (errn );
492+ if (::getsockopt (op->fd , SOL_SOCKET , SO_ERROR , &errn , &len) < 0 )
493+ errn = errno;
494+ if (errn == 0 )
495+ errn = EIO ;
496+ op->complete (errn , 0 );
512497 }
513498 else
514499 {
0 commit comments