@@ -26,17 +26,41 @@ namespace {
2626constexpr size_t kMaxStackSizeVector = 32 ;
2727
2828// MAC_COMPAT: does not accept flags in type
29- impl::FdControlHolder MakeSocket (AddrDomain domain, SocketType type) {
30- return impl::FdControl::Adopt (utils::CheckSyscallCustomException<IoSystemError>(
31- ::socket (
32- static_cast <int >(domain),
29+ constexpr int kSockNonblockFlag =
3330#ifdef SOCK_NONBLOCK
34- SOCK_NONBLOCK |
31+ SOCK_NONBLOCK ;
32+ #else
33+ 0 ;
3534#endif
35+
36+ constexpr int kSockCloexecFlag =
3637#ifdef SOCK_CLOEXEC
37- SOCK_CLOEXEC |
38+ SOCK_CLOEXEC ;
39+ #else
40+ 0 ;
41+ #endif
42+
43+ // MAC_COMPAT: does not support MSG_NOSIGNAL
44+ constexpr int kMsgNosignalFlag =
45+ #ifdef MSG_NOSIGNAL
46+ MSG_NOSIGNAL ;
47+ #else
48+ 0 ;
49+ #endif
50+
51+ bool IsWouldBlock () noexcept {
52+ #if EAGAIN != EWOULDBLOCK
53+ return errno == EAGAIN || errno == EWOULDBLOCK ;
54+ #else
55+ return errno == EAGAIN ;
3856#endif
39- static_cast <int >(type),
57+ }
58+
59+ impl::FdControlHolder MakeSocket (AddrDomain domain, SocketType type) {
60+ return impl::FdControl::Adopt (utils::CheckSyscallCustomException<IoSystemError>(
61+ ::socket (
62+ static_cast <int >(domain),
63+ kSockNonblockFlag | kSockCloexecFlag | static_cast<int>(type),
4064 /* protocol=*/ 0
4165 ),
4266 "creating socket"
@@ -68,11 +92,7 @@ Sockaddr& MemoizeAddr(
6892 fd,
6993 buf,
7094 len,
71- // MAC_COMPAT: does not support MSG_NOSIGNAL
72- #ifdef MSG_NOSIGNAL
73- MSG_NOSIGNAL |
74- #endif
75- 0
95+ kMsgNosignalFlag
7696 );
7797}
7898
@@ -106,11 +126,7 @@ class SendToWrapper {
106126 fd,
107127 buf,
108128 len,
109- // MAC_COMPAT: does not support MSG_NOSIGNAL
110- #ifdef MSG_NOSIGNAL
111- MSG_NOSIGNAL |
112- #endif
113- 0 ,
129+ kMsgNosignalFlag ,
114130 dest_addr_.Data (),
115131 dest_addr_.Size ()
116132 );
@@ -275,14 +291,9 @@ std::optional<size_t> Socket::RecvNoblock(void* buf, size_t len) {
275291 const auto bytes_read = RecvWrapper (fd_control_->Fd (), buf, len);
276292 if (bytes_read >= 0 ) {
277293 return {bytes_read};
278- } else if (
279- #if EAGAIN != EWOULDBLOCK
280- EWOULDBLOCK == errno
281- #else
282- EAGAIN == errno
283- #endif
284- )
294+ } else if (IsWouldBlock ()) {
285295 return {};
296+ }
286297
287298 throw IoException (" Attempt to RecvNoblock from closed socket" );
288299}
0 commit comments