From c6923a30a6881f73b6f06fe1d5360dcacb159e9b Mon Sep 17 00:00:00 2001
From: Micah Elizabeth Scott <micah@scanlime.org>
Date: Thu, 31 Oct 2013 02:16:34 -0700
Subject: [PATCH] Cleanup nonblocking socket init

---
 server/src/opcsink.cpp | 9 ++++++++-
 server/src/opcsink.h   | 1 +
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/server/src/opcsink.cpp b/server/src/opcsink.cpp
index 1311fb5..f1e3491 100644
--- a/server/src/opcsink.cpp
+++ b/server/src/opcsink.cpp
@@ -66,7 +66,7 @@ void OPCSink::start(struct addrinfo *listenAddr)
 
     int arg = 1;
     setsockopt(mSocket, SOL_SOCKET, SO_REUSEADDR, SOCKOPT_ARG(&arg), sizeof arg);
-    fcntl(mSocket, F_SETFL, O_NONBLOCK);
+    setNonBlock(mSocket);
 
     if (bind(mSocket, listenAddr->ai_addr, listenAddr->ai_addrlen)) {
         perror("bind");
@@ -86,6 +86,11 @@ void OPCSink::start(struct addrinfo *listenAddr)
     mThread = new tthread::thread(threadWrapper, this);
 }
 
+void OPCSink::setNonBlock(int fd)
+{
+    fcntl(fd, F_SETFL, O_NONBLOCK);
+}
+
 void OPCSink::threadWrapper(void *arg)
 {
     OPCSink *self = (OPCSink*) arg;
@@ -159,6 +164,8 @@ void OPCSink::pollAccept()
         return;
     }
 
+    setNonBlock(mSocket);
+
     // Disable nagle algorithm, we want low-latency
     int arg = 1;
     setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, SOCKOPT_ARG(&arg), sizeof arg);
diff --git a/server/src/opcsink.h b/server/src/opcsink.h
index ec39399..7241f68 100644
--- a/server/src/opcsink.h
+++ b/server/src/opcsink.h
@@ -82,6 +82,7 @@ private:
 
     static void threadWrapper(void *arg);
     void threadFunc();
+    void setNonBlock(int fd);
 
     void pollAccept();
     bool pollClient(Client &client);
-- 
GitLab