From 537ed164ae1875a8d38e06dbc214ef4f91bc4642 Mon Sep 17 00:00:00 2001 From: Joel Klinghed Date: Tue, 28 Feb 2017 22:24:09 +0100 Subject: Check for accept4() and provide alternative --- src/proxy.cc | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src') diff --git a/src/proxy.cc b/src/proxy.cc index a567dcc..2d84208 100644 --- a/src/proxy.cc +++ b/src/proxy.cc @@ -15,6 +15,7 @@ #include #include #include +#include #include #include "buffer.hh" @@ -1211,6 +1212,25 @@ void ProxyImpl::new_base(BaseClient* client, int fd) { } } +#ifndef HAVE_ACCEPT4 +# define accept4 my_accept4 +# ifdef SOCK_NONBLOCK +# undef SOCK_NONBLOCK +# endif +# define SOCK_NONBLOCK 1 +int my_accept4(int sockfd, struct sockaddr* addr, socklen_t* addrlen, + int flags) { + auto ret = accept(sockfd, addr, addrlen); + if (ret != -1 && (flags & SOCK_NONBLOCK)) { + if (fcntl(ret, F_SETFL, O_NONBLOCK)) { + close(ret); + return -1; + } + } + return ret; +} +#endif // HAVE_ACCEPT4 + void ProxyImpl::new_client(int fd, uint8_t events) { assert(fd == accept_socket_.get()); if (events == Looper::EVENT_READ) { -- cgit v1.2.3-70-g09d2