proxygen
folly::netops Namespace Reference

Namespaces

 detail
 

Classes

struct  PollDescriptor
 

Functions

 TEST (SocketFileDescriptorMap, fd_to_socket_consistent)
 
 TEST (SocketFileDescriptorMap, no_socket_reuse)
 
 TEST (SocketFileDescriptorMap, close_non_mapped_native_socket)
 
NetworkSocket accept (NetworkSocket s, sockaddr *addr, socklen_t *addrlen)
 
int bind (NetworkSocket s, const sockaddr *name, socklen_t namelen)
 
int close (NetworkSocket s)
 
int connect (NetworkSocket s, const sockaddr *name, socklen_t namelen)
 
int getpeername (NetworkSocket s, sockaddr *name, socklen_t *namelen)
 
int getsockname (NetworkSocket s, sockaddr *name, socklen_t *namelen)
 
int getsockopt (NetworkSocket s, int level, int optname, void *optval, socklen_t *optlen)
 
int inet_aton (const char *cp, in_addr *inp)
 
int listen (NetworkSocket s, int backlog)
 
int poll (PollDescriptor fds[], nfds_t nfds, int timeout)
 
ssize_t recv (NetworkSocket s, void *buf, size_t len, int flags)
 
ssize_t recvfrom (NetworkSocket s, void *buf, size_t len, int flags, sockaddr *from, socklen_t *fromlen)
 
ssize_t recvmsg (NetworkSocket s, msghdr *message, int flags)
 
ssize_t send (NetworkSocket s, const void *buf, size_t len, int flags)
 
ssize_t sendmsg (NetworkSocket socket, const msghdr *message, int flags)
 
ssize_t sendto (NetworkSocket s, const void *buf, size_t len, int flags, const sockaddr *to, socklen_t tolen)
 
int setsockopt (NetworkSocket s, int level, int optname, const void *optval, socklen_t optlen)
 
int shutdown (NetworkSocket s, int how)
 
NetworkSocket socket (int af, int type, int protocol)
 
int socketpair (int domain, int type, int protocol, NetworkSocket sv[2])
 
int set_socket_non_blocking (NetworkSocket s)
 
int set_socket_close_on_exec (NetworkSocket s)
 

Function Documentation

NetworkSocket folly::netops::accept ( NetworkSocket  s,
sockaddr *  addr,
socklen_t *  addrlen 
)
int folly::netops::bind ( NetworkSocket  s,
const sockaddr *  name,
socklen_t  namelen 
)

Definition at line 76 of file NetOps.cpp.

References folly::kIsWindows, name, and s.

Referenced by folly::ThreadPoolExecutor::addThreads(), BENCHMARK(), folly::AsyncUDPSocket::bind(), folly::AsyncServerSocket::bind(), wangle::ServerBootstrap< DefaultPipeline >::bindImpl(), folly::AsyncServerSocket::bindSocket(), folly::AsyncSocket::connect(), wangle::SSLContextManager::ctxSetupByOpensslFeature(), proxygen::QueueTest::dump(), proxygen::QueueTest::dumpBFS(), wangle::FilePoller::fileTouchedWithinCond(), TestAsyncTransport::fireNextReadEvent(), folly::TestSSLAsyncCacheServer::getSessionCallback(), proxygen::FakeHTTPCodecCallback::getStopFn(), wangle::LocalSSLSessionCache::LocalSSLSessionCache(), StaticService::StaticHandler::onEgressResumed(), StaticService::StaticHandler::onRequest(), run_basic_tests(), run_mt_sequencer_test(), runNeverFailTest(), runTryEnqDeqTest(), folly::runWritesNeverFail(), scheduleEvents(), folly::test::Server::Server(), folly::SNIServer::SNIServer(), TEST(), TEST_F(), testConnectOptWrite(), TestServer::TestServer(), testSetFromSocket(), ThreadExecutor::ThreadExecutor(), and tmpDisableReads().

76  {
77  if (kIsWindows && name->sa_family == AF_UNIX) {
78  // Windows added support for AF_UNIX sockets, but didn't add
79  // support for autobind sockets, so detect requests for autobind
80  // sockets and treat them as invalid. (otherwise they don't trigger
81  // an error, but also don't actually work)
82  if (name->sa_data[0] == '\0') {
83  errno = EINVAL;
84  return -1;
85  }
86  }
87  return wrapSocketFunction<int>(::bind, s, name, namelen);
88 }
const char * name
Definition: http_parser.c:437
int bind(NetworkSocket s, const sockaddr *name, socklen_t namelen)
Definition: NetOps.cpp:76
static set< string > s
constexpr auto kIsWindows
Definition: Portability.h:367
int folly::netops::close ( NetworkSocket  s)

Definition at line 90 of file NetOps.cpp.

References folly::netops::detail::SocketFileDescriptorMap::close(), and folly::NetworkSocket::data.

Referenced by BENCHMARK(), folly::AsyncUDPSocket::bind(), folly::test::CaptureFD::CaptureFD(), folly::netops::detail::SocketFileDescriptorMap::close(), BonkMultiplexClientDispatcher::close(), folly::AsyncUDPSocket::close(), testing::internal::posix::Close(), folly::SocketPair::closeFD0(), folly::SocketPair::closeFD1(), wangle::BroadcastHandler< T, R >::closeIfIdle(), folly::closeNoInt(), folly::SSLServerAcceptCallbackBase::connectionAccepted(), wangle::Acceptor::connectionAccepted(), wangle::Pipeline< int >::create(), proxygen::HTTPDirectResponseHandler::forceConnectionClose(), folly::getSchedTimeWaiting(), fizz::client::test::MockAsyncFizzClient::MockAsyncFizzClient(), folly::NotificationQueue< folly::AsyncServerSocket::QueueMessage >::NotificationQueue(), testing::internal::PortableLocaltime(), folly::Subprocess::prepareChild(), TelnetHandler::read(), FileServerHandler::read(), folly::WriteErrorCallback::readDataAvailable(), TelnetHandler::readEOF(), EchoHandler::readEOF(), ProxyFrontendHandler::readEOF(), TelnetHandler::readException(), EchoHandler::readException(), FileServerHandler::readException(), ProxyFrontendHandler::readException(), folly::test::CaptureFD::release(), folly::symbolizer::ElfFile::reset(), folly::test::runCloseTest(), folly::test::runKillTest(), folly::Subprocess::spawn(), folly::Subprocess::spawnInternal(), EventHandlerTest::TearDown(), TEST(), TEST(), TEST_F(), fizz::test::TEST_F(), testing::internal::TestResultAccessor::test_part_results(), testConnectOptWrite(), testing::internal::XmlUnitTestResultPrinter::TestPropertiesAsXmlAttributes(), testSetFromSocket(), testTemporaryDirectory(), ThreadPrintingHandler::transportActive(), ProxyFrontendHandler::transportActive(), folly::writeFileAtomicNoThrow(), folly::AsyncIO::~AsyncIO(), testing::internal::GTestLog::~GTestLog(), folly::NotificationQueue< folly::AsyncServerSocket::QueueMessage >::~NotificationQueue(), and TestServer::~TestServer().

90  {
92 }
static set< string > s
int close(NetworkSocket s)
Definition: NetOps.cpp:90
int folly::netops::getpeername ( NetworkSocket  s,
sockaddr *  name,
socklen_t *  namelen 
)

Definition at line 104 of file NetOps.cpp.

References name, and s.

Referenced by folly::ssl::OpenSSLUtils::getPeerAddressFromX509StoreCtx(), and folly::SocketAddress::setFromPeerAddress().

104  {
105  return wrapSocketFunction<int>(::getpeername, s, name, namelen);
106 }
const char * name
Definition: http_parser.c:437
static set< string > s
int getpeername(NetworkSocket s, sockaddr *name, socklen_t *namelen)
Definition: NetOps.cpp:104
int folly::netops::getsockname ( NetworkSocket  s,
sockaddr *  name,
socklen_t *  namelen 
)

Definition at line 108 of file NetOps.cpp.

References name, and s.

Referenced by folly::test::Server::Server(), folly::SocketAddress::setFromLocalAddress(), and TEST_F().

108  {
109  return wrapSocketFunction<int>(::getsockname, s, name, namelen);
110 }
const char * name
Definition: http_parser.c:437
int getsockname(NetworkSocket s, sockaddr *name, socklen_t *namelen)
Definition: NetOps.cpp:108
static set< string > s
int folly::netops::getsockopt ( NetworkSocket  s,
int  level,
int  optname,
void *  optval,
socklen_t *  optlen 
)

Definition at line 112 of file NetOps.cpp.

References s, and uint8_t.

Referenced by folly::SSLServerAcceptCallbackDelay::connAccepted(), folly::AsyncUDPSocket::getGSO(), folly::AsyncSocket::getSockOpt(), folly::AsyncSocket::getSockOptVirtual(), folly::AsyncSocket::handleConnect(), folly::AsyncServerSocket::handlerReady(), wangle::TransportInfo::readRTT(), folly::AsyncSocket::setZeroCopy(), folly::TEST(), and TEST().

117  {
118  auto ret = wrapSocketFunction<int>(
119  ::getsockopt, s, level, optname, (char*)optval, optlen);
120 #if _WIN32
121  if (optname == TCP_NODELAY && *optlen == 1) {
122  // Windows is weird about this value, and documents it as a
123  // BOOL (ie. int) but expects the variable to be bool (1-byte),
124  // so we get to adapt the interface to work that way.
125  *(int*)optval = *(uint8_t*)optval;
126  *optlen = sizeof(int);
127  }
128 #endif
129  return ret;
130 }
int getsockopt(NetworkSocket s, int level, int optname, void *optval, socklen_t *optlen)
Definition: NetOps.cpp:112
static set< string > s
int folly::netops::inet_aton ( const char *  cp,
in_addr *  inp 
)

Definition at line 132 of file NetOps.cpp.

132  {
133  inp->s_addr = inet_addr(cp);
134  return inp->s_addr == INADDR_NONE ? 0 : 1;
135 }
int folly::netops::listen ( NetworkSocket  s,
int  backlog 
)

Definition at line 137 of file NetOps.cpp.

References s.

Referenced by folly::AsyncServerSocket::listen(), folly::test::Server::Server(), TEST(), TEST_F(), TestServer::TestServer(), and testSetFromSocket().

137  {
138  return wrapSocketFunction<int>(::listen, s, backlog);
139 }
int listen(NetworkSocket s, int backlog)
Definition: NetOps.cpp:137
static set< string > s
int folly::netops::poll ( PollDescriptor  fds[],
nfds_t  nfds,
int  timeout 
)

Definition at line 141 of file NetOps.cpp.

Referenced by TestServer::acceptFD(), folly::Subprocess::communicate(), folly::Future< folly::folly::Unit >::Future(), folly::AsyncSocket::hangup(), folly::Subprocess::pollChecked(), folly::AsyncSocket::readable(), folly::Subprocess::returnCode(), folly::SemiFuture< T >::SemiFuture(), TEST(), folly::futures::detail::FutureBase< T >::valid(), and folly::AsyncSocket::writable().

141  {
142  // Make sure that PollDescriptor is byte-for-byte identical to pollfd,
143  // so we don't need extra allocations just for the safety of this shim.
144  static_assert(
145  alignof(PollDescriptor) == alignof(pollfd),
146  "PollDescriptor is misaligned");
147  static_assert(
148  sizeof(PollDescriptor) == sizeof(pollfd),
149  "PollDescriptor is the wrong size");
150  static_assert(
151  offsetof(PollDescriptor, fd) == offsetof(pollfd, fd),
152  "PollDescriptor.fd is at the wrong place");
153  static_assert(
154  sizeof(decltype(PollDescriptor().fd)) == sizeof(decltype(pollfd().fd)),
155  "PollDescriptor.fd is the wrong size");
156  static_assert(
157  offsetof(PollDescriptor, events) == offsetof(pollfd, events),
158  "PollDescriptor.events is at the wrong place");
159  static_assert(
160  sizeof(decltype(PollDescriptor().events)) ==
161  sizeof(decltype(pollfd().events)),
162  "PollDescriptor.events is the wrong size");
163  static_assert(
164  offsetof(PollDescriptor, revents) == offsetof(pollfd, revents),
165  "PollDescriptor.revents is at the wrong place");
166  static_assert(
167  sizeof(decltype(PollDescriptor().revents)) ==
168  sizeof(decltype(pollfd().revents)),
169  "PollDescriptor.revents is the wrong size");
170 
171  // Pun it through
172  pollfd* files = reinterpret_cast<pollfd*>(reinterpret_cast<void*>(fds));
173 #if _WIN32
174  return ::WSAPoll(files, (ULONG)nfds, timeout);
175 #else
176  return ::poll(files, nfds, timeout);
177 #endif
178 }
int poll(PollDescriptor fds[], nfds_t nfds, int timeout)
Definition: NetOps.cpp:141
ssize_t folly::netops::recv ( NetworkSocket  s,
void *  buf,
size_t  len,
int  flags 
)

Definition at line 180 of file NetOps.cpp.

References folly::NetworkSocket::data, s, and folly::detail::timeout.

Referenced by folly::AsyncSSLSocket::bioRead(), folly::AsyncSocket::performRead(), folly::TEST(), and TEST_F().

180  {
181 #if _WIN32
182  if ((flags & MSG_DONTWAIT) == MSG_DONTWAIT) {
183  flags &= ~MSG_DONTWAIT;
184 
185  u_long pendingRead = 0;
186  if (ioctlsocket(s.data, FIONREAD, &pendingRead)) {
187  errno = translate_wsa_error(WSAGetLastError());
188  return -1;
189  }
190 
191  fd_set readSet;
192  FD_ZERO(&readSet);
193  FD_SET(s.data, &readSet);
194  timeval timeout{0, 0};
195  auto ret = select(1, &readSet, nullptr, nullptr, &timeout);
196  if (ret == 0) {
197  errno = EWOULDBLOCK;
198  return -1;
199  }
200  }
201  return wrapSocketFunction<ssize_t>(::recv, s, (char*)buf, (int)len, flags);
202 #else
203  return wrapSocketFunction<ssize_t>(::recv, s, buf, len, flags);
204 #endif
205 }
flags
Definition: http_parser.h:127
static set< string > s
ssize_t recv(NetworkSocket s, void *buf, size_t len, int flags)
Definition: NetOps.cpp:180
ssize_t folly::netops::recvfrom ( NetworkSocket  s,
void *  buf,
size_t  len,
int  flags,
sockaddr *  from,
socklen_t *  fromlen 
)

Definition at line 207 of file NetOps.cpp.

References folly::NetworkSocket::data, folly::pushmi::operators::from, h, and s.

Referenced by folly::AsyncUDPSocket::handleRead().

213  {
214 #if _WIN32
215  if ((flags & MSG_TRUNC) == MSG_TRUNC) {
216  SOCKET h = s.data;
217 
218  WSABUF wBuf{};
219  wBuf.buf = (CHAR*)buf;
220  wBuf.len = (ULONG)len;
221  WSAMSG wMsg{};
222  wMsg.dwBufferCount = 1;
223  wMsg.lpBuffers = &wBuf;
224  wMsg.name = from;
225  if (fromlen != nullptr) {
226  wMsg.namelen = *fromlen;
227  }
228 
229  // WSARecvMsg is an extension, so we don't get
230  // the convenience of being able to call it directly, even though
231  // WSASendMsg is part of the normal API -_-...
232  LPFN_WSARECVMSG WSARecvMsg;
233  GUID WSARecgMsg_GUID = WSAID_WSARECVMSG;
234  DWORD recMsgBytes;
235  WSAIoctl(
236  h,
237  SIO_GET_EXTENSION_FUNCTION_POINTER,
238  &WSARecgMsg_GUID,
239  sizeof(WSARecgMsg_GUID),
240  &WSARecvMsg,
241  sizeof(WSARecvMsg),
242  &recMsgBytes,
243  nullptr,
244  nullptr);
245 
246  DWORD bytesReceived;
247  int res = WSARecvMsg(h, &wMsg, &bytesReceived, nullptr, nullptr);
248  errno = translate_wsa_error(WSAGetLastError());
249  if (res == 0) {
250  return bytesReceived;
251  }
252  if (fromlen != nullptr) {
253  *fromlen = wMsg.namelen;
254  }
255  if ((wMsg.dwFlags & MSG_TRUNC) == MSG_TRUNC) {
256  return wBuf.len + 1;
257  }
258  return -1;
259  }
260  return wrapSocketFunction<ssize_t>(
261  ::recvfrom, s, (char*)buf, (int)len, flags, from, fromlen);
262 #else
263  return wrapSocketFunction<ssize_t>(
264  ::recvfrom, s, buf, len, flags, from, fromlen);
265 #endif
266 }
ssize_t recvfrom(NetworkSocket s, void *buf, size_t len, int flags, sockaddr *from, socklen_t *fromlen)
Definition: NetOps.cpp:207
*than *hazptr_holder h
Definition: Hazptr.h:116
flags
Definition: http_parser.h:127
PUSHMI_INLINE_VAR constexpr struct folly::pushmi::operators::from_fn from
static set< string > s
ssize_t folly::netops::recvmsg ( NetworkSocket  s,
msghdr *  message,
int  flags 
)

Definition at line 268 of file NetOps.cpp.

References folly::NetworkSocket::data, h, i, message, s, and SCOPE_EXIT.

Referenced by folly::AsyncUDPSocket::handleErrMessages(), folly::AsyncSocket::handleErrMessages(), TEST(), and folly::ExpectWriteErrorCallback::~ExpectWriteErrorCallback().

268  {
269 #if _WIN32
270  (void)flags;
271  SOCKET h = s.data;
272 
273  // Don't currently support the name translation.
274  if (message->msg_name != nullptr || message->msg_namelen != 0) {
275  return (ssize_t)-1;
276  }
277  WSAMSG msg;
278  msg.name = nullptr;
279  msg.namelen = 0;
280  msg.Control.buf = (CHAR*)message->msg_control;
281  msg.Control.len = (ULONG)message->msg_controllen;
282  msg.dwFlags = 0;
283  msg.dwBufferCount = (DWORD)message->msg_iovlen;
284  msg.lpBuffers = new WSABUF[message->msg_iovlen];
285  SCOPE_EXIT {
286  delete[] msg.lpBuffers;
287  };
288  for (size_t i = 0; i < message->msg_iovlen; i++) {
289  msg.lpBuffers[i].buf = (CHAR*)message->msg_iov[i].iov_base;
290  msg.lpBuffers[i].len = (ULONG)message->msg_iov[i].iov_len;
291  }
292 
293  // WSARecvMsg is an extension, so we don't get
294  // the convenience of being able to call it directly, even though
295  // WSASendMsg is part of the normal API -_-...
296  LPFN_WSARECVMSG WSARecvMsg;
297  GUID WSARecgMsg_GUID = WSAID_WSARECVMSG;
298  DWORD recMsgBytes;
299  WSAIoctl(
300  h,
301  SIO_GET_EXTENSION_FUNCTION_POINTER,
302  &WSARecgMsg_GUID,
303  sizeof(WSARecgMsg_GUID),
304  &WSARecvMsg,
305  sizeof(WSARecvMsg),
306  &recMsgBytes,
307  nullptr,
308  nullptr);
309 
310  DWORD bytesReceived;
311  int res = WSARecvMsg(h, &msg, &bytesReceived, nullptr, nullptr);
312  errno = translate_wsa_error(WSAGetLastError());
313  return res == 0 ? (ssize_t)bytesReceived : -1;
314 #else
315  return wrapSocketFunction<ssize_t>(::recvmsg, s, message, flags);
316 #endif
317 }
Definition: test.c:42
*than *hazptr_holder h
Definition: Hazptr.h:116
flags
Definition: http_parser.h:127
#define SCOPE_EXIT
Definition: ScopeGuard.h:274
std::string message
Definition: SPDYCodec.cpp:133
ssize_t recvmsg(NetworkSocket s, msghdr *message, int flags)
Definition: NetOps.cpp:268
static set< string > s
ssize_t folly::netops::send ( NetworkSocket  s,
const void *  buf,
size_t  len,
int  flags 
)

Definition at line 319 of file NetOps.cpp.

References s.

Referenced by ZlibServerFilterTest::exercise_compression(), PushService::PushRequestHandler::onRequest(), sendmsg(), and TEST_F().

319  {
320 #if _WIN32
321  return wrapSocketFunction<ssize_t>(
322  ::send, s, (const char*)buf, (int)len, flags);
323 #else
324  return wrapSocketFunction<ssize_t>(::send, s, buf, len, flags);
325 #endif
326 }
flags
Definition: http_parser.h:127
ssize_t send(NetworkSocket s, const void *buf, size_t len, int flags)
Definition: NetOps.cpp:319
static set< string > s
ssize_t folly::netops::sendmsg ( NetworkSocket  socket,
const msghdr *  message,
int  flags 
)

Definition at line 328 of file NetOps.cpp.

References folly::NetworkSocket::data, h, i, message, send(), sendto(), and socket().

Referenced by folly::AsyncUDPSocket::sendmsg(), folly::AsyncSocket::sendSocketMessage(), TestAsyncUDPSocket::TestAsyncUDPSocket(), and ConnectedWriteUDPClient::writePing().

328  {
329 #if _WIN32
330  (void)flags;
331  SOCKET h = socket.data;
332 
333  // Unfortunately, WSASendMsg requires the socket to have been opened
334  // as either SOCK_DGRAM or SOCK_RAW, but sendmsg has no such requirement,
335  // so we have to implement it based on send instead :(
336  ssize_t bytesSent = 0;
337  for (size_t i = 0; i < message->msg_iovlen; i++) {
338  int r = -1;
339  if (message->msg_name != nullptr) {
340  r = ::sendto(
341  h,
342  (const char*)message->msg_iov[i].iov_base,
343  (int)message->msg_iov[i].iov_len,
344  message->msg_flags,
345  (const sockaddr*)message->msg_name,
346  (int)message->msg_namelen);
347  } else {
348  r = ::send(
349  h,
350  (const char*)message->msg_iov[i].iov_base,
351  (int)message->msg_iov[i].iov_len,
352  message->msg_flags);
353  }
354  if (r == -1 || size_t(r) != message->msg_iov[i].iov_len) {
355  errno = translate_wsa_error(WSAGetLastError());
356  if (WSAGetLastError() == WSAEWOULDBLOCK && bytesSent > 0) {
357  return bytesSent;
358  }
359  return -1;
360  }
361  bytesSent += r;
362  }
363  return bytesSent;
364 #else
365  return wrapSocketFunction<ssize_t>(::sendmsg, socket, message, flags);
366 #endif
367 }
Definition: test.c:42
*than *hazptr_holder h
Definition: Hazptr.h:116
flags
Definition: http_parser.h:127
ssize_t sendmsg(NetworkSocket socket, const msghdr *message, int flags)
Definition: NetOps.cpp:328
ssize_t sendto(NetworkSocket s, const void *buf, size_t len, int flags, const sockaddr *to, socklen_t tolen)
Definition: NetOps.cpp:369
std::string message
Definition: SPDYCodec.cpp:133
ssize_t send(NetworkSocket s, const void *buf, size_t len, int flags)
Definition: NetOps.cpp:319
NetworkSocket socket(int af, int type, int protocol)
Definition: NetOps.cpp:412
native_handle_type data
Definition: NetworkSocket.h:39
ssize_t folly::netops::sendto ( NetworkSocket  s,
const void *  buf,
size_t  len,
int  flags,
const sockaddr *  to,
socklen_t  tolen 
)

Definition at line 369 of file NetOps.cpp.

References s, and folly::to().

Referenced by sendmsg().

375  {
376 #if _WIN32
377  return wrapSocketFunction<ssize_t>(
378  ::sendto, s, (const char*)buf, (int)len, flags, to, (int)tolen);
379 #else
380  return wrapSocketFunction<ssize_t>(::sendto, s, buf, len, flags, to, tolen);
381 #endif
382 }
flags
Definition: http_parser.h:127
ssize_t sendto(NetworkSocket s, const void *buf, size_t len, int flags, const sockaddr *to, socklen_t tolen)
Definition: NetOps.cpp:369
std::enable_if< detail::is_chrono_conversion< Tgt, Src >::value, Tgt >::type to(const Src &value)
Definition: Conv.h:677
static set< string > s
int folly::netops::set_socket_close_on_exec ( NetworkSocket  s)

Definition at line 454 of file NetOps.cpp.

References folly::NetworkSocket::data.

454  {
455 #if _WIN32
456  if (SetHandleInformation((HANDLE)s.data, HANDLE_FLAG_INHERIT, 0)) {
457  return 0;
458  }
459  return -1;
460 #else
461  return fcntl(s.data, F_SETFD, FD_CLOEXEC);
462 #endif
463 }
static set< string > s
int folly::netops::set_socket_non_blocking ( NetworkSocket  s)

Definition at line 441 of file NetOps.cpp.

References folly::NetworkSocket::data.

Referenced by folly::AsyncUDPSocket::bind().

441  {
442 #if _WIN32
443  u_long nonBlockingEnabled = 1;
444  return ioctlsocket(s.data, FIONBIO, &nonBlockingEnabled);
445 #else
446  int flags = fcntl(s.data, F_GETFL, 0);
447  if (flags == -1) {
448  return -1;
449  }
450  return fcntl(s.data, F_SETFL, flags | O_NONBLOCK);
451 #endif
452 }
flags
Definition: http_parser.h:127
static set< string > s
int folly::netops::setsockopt ( NetworkSocket  s,
int  level,
int  optname,
const void *  optval,
socklen_t  optlen 
)

Definition at line 384 of file NetOps.cpp.

References s, and SO_REUSEPORT.

Referenced by folly::AsyncSocket::OptionKey::apply(), folly::AsyncUDPSocket::bind(), folly::AsyncServerSocket::bind(), folly::AsyncServerSocket::bindSocket(), folly::test::Server::closeClients(), folly::SSLServerAcceptCallbackDelay::connAccepted(), folly::AsyncSocket::connect(), wangle::Acceptor::connectionAccepted(), folly::AsyncUDPSocket::dontFragment(), folly::ShutdownSocketSet::doShutdown(), folly::AsyncSocket::SendMsgParamsCallback::getDefaultFlags(), folly::AsyncServerSocket::handlerReady(), folly::AsyncSocket::setCongestionFlavor(), folly::AsyncUDPSocket::setErrMessageCallback(), folly::AsyncUDPSocket::setGSO(), folly::AsyncServerSocket::setKeepAliveEnabled(), folly::AsyncSocket::setNoDelay(), folly::AsyncSocket::setQuickAck(), folly::AsyncSocket::setRecvBufSize(), folly::AsyncServerSocket::setReusePortEnabled(), folly::AsyncSocket::setSendBufSize(), folly::AsyncSocket::setSockOpt(), folly::AsyncSocket::setSockOptVirtual(), folly::AsyncSocket::setTCPProfile(), folly::AsyncServerSocket::setTosReflect(), folly::AsyncServerSocket::setupSocket(), folly::AsyncServerSocket::setZeroCopy(), folly::AsyncSocket::setZeroCopy(), TestServer::TestServer(), and folly::AsyncServerSocket::useExistingSockets().

389  {
390 #if _WIN32
391  if (optname == SO_REUSEADDR) {
392  // We don't have an equivelent to the Linux & OSX meaning of this
393  // on Windows, so ignore it.
394  return 0;
395  } else if (optname == SO_REUSEPORT) {
396  // Windows's SO_REUSEADDR option is closer to SO_REUSEPORT than
397  // it is to the Linux & OSX meaning of SO_REUSEADDR.
398  return -1;
399  }
400  return wrapSocketFunction<int>(
401  ::setsockopt, s, level, optname, (char*)optval, optlen);
402 #else
403  return wrapSocketFunction<int>(
404  ::setsockopt, s, level, optname, optval, optlen);
405 #endif
406 }
int setsockopt(NetworkSocket s, int level, int optname, const void *optval, socklen_t optlen)
Definition: NetOps.cpp:384
static set< string > s
#define SO_REUSEPORT
int folly::netops::shutdown ( NetworkSocket  s,
int  how 
)

Definition at line 408 of file NetOps.cpp.

References s.

Referenced by folly::shutdownNoInt().

408  {
409  return wrapSocketFunction<int>(::shutdown, s, how);
410 }
int shutdown(NetworkSocket s, int how)
Definition: NetOps.cpp:408
static set< string > s
NetworkSocket folly::netops::socket ( int  af,
int  type,
int  protocol 
)

Definition at line 412 of file NetOps.cpp.

Referenced by wangle::AsyncServerSocketFactory::addAcceptCB(), wangle::AsyncUDPServerSocketFactory::addAcceptCB(), folly::AsyncUDPSocket::bind(), wangle::ServerBootstrap< DefaultPipeline >::bind(), folly::AsyncServerSocket::bind(), wangle::ServerBootstrap< DefaultPipeline >::bindImpl(), wangle::ClientBootstrap< DefaultPipeline >::connect(), folly::AsyncSocket::connect(), folly::test::createConnectedSocket(), folly::AsyncServerSocket::createSocket(), folly::AsyncServerSocket::dispatchSocket(), folly::AsyncServerSocket::getAddresses(), main(), folly::SocketAddress::makeFromPath(), wangle::AsyncServerSocketFactory::newSocket(), wangle::AsyncUDPServerSocketFactory::newSocket(), UDPAcceptor::onDataAvailable(), folly::AsyncUDPServerSocket::onDataAvailable(), wangle::ServerAcceptor< Pipeline >::onDataAvailable(), folly::AsyncUDPServerSocket::Callback::onListenResumed(), wangle::AcceptRoutingHandler< Pipeline, R >::onRoutingData(), wangle::AsyncUDPServerSocketFactory::ThreadSafeDestructor::operator()(), testing::internal::PortableLocaltime(), wangle::AcceptRoutingHandler< Pipeline, R >::read(), wangle::AsyncServerSocketFactory::removeAcceptCB(), sendmsg(), UDPAcceptor::sendPong(), folly::test::Server::Server(), serverSocketSanityTest(), folly::ssl::OpenSSLUtils::setBioFd(), folly::SendMsgParamsCallbackBase::setSocket(), folly::WriteCallbackBase::setSocket(), folly::ReadCallbackBase::setSocket(), folly::HandshakeCallback::setSocket(), folly::TEST(), TEST(), TEST(), TEST_F(), TEST_P(), testConnectOptWrite(), testing::internal::XmlUnitTestResultPrinter::TestPropertiesAsXmlAttributes(), TestServer::TestServer(), testSetFromSocket(), wangle::ServerWorkerPool::threadStarted(), wangle::ServerWorkerPool::threadStopped(), proxygen::HTTPServerOptions::useExistingSockets(), folly::ExpectWriteErrorCallback::~ExpectWriteErrorCallback(), and wangle::RoutingDataPipelineFactory< ObservingPipeline< T >, R >::~RoutingDataPipelineFactory().

412  {
413  return NetworkSocket(::socket(af, type, protocol));
414 }
PskType type
NetworkSocket socket(int af, int type, int protocol)
Definition: NetOps.cpp:412
int folly::netops::socketpair ( int  domain,
int  type,
int  protocol,
NetworkSocket  sv[2] 
)

Definition at line 416 of file NetOps.cpp.

Referenced by folly::getfds(), folly::SocketPair::SocketPair(), and TEST().

416  {
417 #if _WIN32
418  if (domain != PF_UNIX || type != SOCK_STREAM || protocol != 0) {
419  return -1;
420  }
421  intptr_t pair[2];
422  auto r = evutil_socketpair(AF_INET, type, protocol, pair);
423  if (r == -1) {
424  return r;
425  }
426  sv[0] = NetworkSocket(static_cast<SOCKET>(pair[0]));
427  sv[1] = NetworkSocket(static_cast<SOCKET>(pair[1]));
428  return r;
429 #else
430  int pair[2];
431  auto r = ::socketpair(domain, type, protocol, pair);
432  if (r == -1) {
433  return r;
434  }
435  sv[0] = NetworkSocket(pair[0]);
436  sv[1] = NetworkSocket(pair[1]);
437  return r;
438 #endif
439 }
PskType type
Definition: Traits.h:577
int socketpair(int domain, int type, int protocol, NetworkSocket sv[2])
Definition: NetOps.cpp:416
folly::netops::TEST ( SocketFileDescriptorMap  ,
fd_to_socket_consistent   
)

Definition at line 31 of file SocketFileDescriptorMapTest.cpp.

References folly::netops::detail::SocketFileDescriptorMap::close(), EXPECT_EQ, folly::netops::detail::SocketFileDescriptorMap::fdToSocket(), socket(), and folly::netops::detail::SocketFileDescriptorMap::socketToFd().

31  {
32  auto fd = fsp::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
33  auto sockA = SocketFileDescriptorMap::fdToSocket(fd);
34  auto sockB = SocketFileDescriptorMap::fdToSocket(fd);
35  EXPECT_EQ(sockA, sockB);
36 
37  int fd2 = SocketFileDescriptorMap::socketToFd(sockA);
38  EXPECT_EQ(fd, fd2);
39 
41 }
#define EXPECT_EQ(val1, val2)
Definition: gtest.h:1922
NetworkSocket socket(int af, int type, int protocol)
Definition: NetOps.cpp:412
int close(NetworkSocket s)
Definition: NetOps.cpp:90
folly::netops::TEST ( SocketFileDescriptorMap  ,
no_socket_reuse   
)

Definition at line 43 of file SocketFileDescriptorMapTest.cpp.

References folly::netops::detail::SocketFileDescriptorMap::close(), close(), EXPECT_EQ, EXPECT_NE, folly::netops::detail::SocketFileDescriptorMap::fdToSocket(), folly::kIsWindows, socket(), and folly::netops::detail::SocketFileDescriptorMap::socketToFd().

43  {
44  auto sock = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
45  int fdA = SocketFileDescriptorMap::socketToFd(sock);
46  int fdB = SocketFileDescriptorMap::socketToFd(sock);
47  EXPECT_EQ(fdA, fdB);
48 
49  auto sock2 = SocketFileDescriptorMap::fdToSocket(fdA);
50  EXPECT_EQ(sock, sock2);
51 
53 
54  // We're on Windows, so let's do some additional testing to ensure
55  // that we aren't using stale entries in the map.
56  // This is guarded to only on Windows because we need to assert on
57  // the specifics of how file descriptors & sockets are allocated,
58  // which varies between platforms.
59  if (kIsWindows) {
60  auto sock3 = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
61  // Nothing else is running in this context, so we should,
62  // in theory, have re-allocated the same socket/file descriptor.
63  EXPECT_EQ(sock, sock3);
64 
65  // Now we mess up the order by creating a new FD.
66  int devNull = ::open("/dev/null", O_RDONLY);
67  EXPECT_EQ(devNull, fdA);
68 
69  int fdC = SocketFileDescriptorMap::socketToFd(sock);
70  EXPECT_NE(fdA, fdC);
71 
73  ::close(devNull);
74  }
75 }
#define EXPECT_EQ(val1, val2)
Definition: gtest.h:1922
NetworkSocket socket(int af, int type, int protocol)
Definition: NetOps.cpp:412
#define EXPECT_NE(val1, val2)
Definition: gtest.h:1926
constexpr auto kIsWindows
Definition: Portability.h:367
int close(NetworkSocket s)
Definition: NetOps.cpp:90
folly::netops::TEST ( SocketFileDescriptorMap  ,
close_non_mapped_native_socket   
)

Definition at line 77 of file SocketFileDescriptorMapTest.cpp.

References folly::netops::detail::SocketFileDescriptorMap::close(), and socket().

77  {
78  auto sock = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
80 }
NetworkSocket socket(int af, int type, int protocol)
Definition: NetOps.cpp:412
int close(NetworkSocket s)
Definition: NetOps.cpp:90