]> git.sesse.net Git - cubemap/blobdiff - acceptor.cpp
Use accept4() to save a system call. Probably inconsequential, but still nice.
[cubemap] / acceptor.cpp
index b5b4039899335714a5bdb47125be902aae95d706..7c28ca58038c27b107cad1b8dd82d6dd3b78bd3c 100644 (file)
@@ -67,7 +67,7 @@ int create_server_socket(const sockaddr_in6 &addr, SocketType socket_type)
        return server_sock;
 }
 
-sockaddr_in6 CreateAnyAddress(int port)
+sockaddr_in6 create_any_address(int port)
 {
        sockaddr_in6 sin6;
        memset(&sin6, 0, sizeof(sin6));
@@ -76,7 +76,7 @@ sockaddr_in6 CreateAnyAddress(int port)
        return sin6;
 }
 
-sockaddr_in6 ExtractAddressFromAcceptorProto(const AcceptorProto &proto)
+sockaddr_in6 extract_address_from_acceptor_proto(const AcceptorProto &proto)
 {
        sockaddr_in6 sin6;
        memset(&sin6, 0, sizeof(sin6));
@@ -99,7 +99,7 @@ Acceptor::Acceptor(int server_sock, const sockaddr_in6 &addr)
 
 Acceptor::Acceptor(const AcceptorProto &serialized)
        : server_sock(serialized.server_sock()),
-         addr(ExtractAddressFromAcceptorProto(serialized))
+         addr(extract_address_from_acceptor_proto(serialized))
 {
 }
 
@@ -130,8 +130,8 @@ void Acceptor::do_work()
                sockaddr_in6 addr;
                socklen_t addrlen = sizeof(addr);
 
-               // Get a new socket.
-               int sock = accept(server_sock, reinterpret_cast<sockaddr *>(&addr), &addrlen);
+               // Get a new socket, and set it as nonblocking.
+               int sock = accept4(server_sock, reinterpret_cast<sockaddr *>(&addr), &addrlen, SOCK_NONBLOCK);
                if (sock == -1 && errno == EINTR) {
                        continue;
                }
@@ -141,16 +141,10 @@ void Acceptor::do_work()
                        continue;
                }
 
-               // Set the socket as nonblocking.
-               int one = 1;
-               if (ioctl(sock, FIONBIO, &one) == -1) {
-                       log_perror("ioctl(FIONBIO)");
-                       exit(1);
-               }
-
                // Enable TCP_CORK for maximum throughput. In the rare case that the
                // stream stops entirely, this will cause a small delay (~200 ms)
                // before the last part is sent out, but that should be fine.
+               int one = 1;
                if (setsockopt(sock, SOL_TCP, TCP_CORK, &one, sizeof(one)) == -1) {
                        log_perror("setsockopt(TCP_CORK)");
                        // Can still continue.