diff --git a/server/src/opcsink.cpp b/server/src/opcsink.cpp
index 1311fb5b911189ddb66760dd5215e69e1fa88071..f1e3491ffae2a4e7891f0de0660226e572f2c563 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 ec393999a1b65b91a62eb71bc0ed3df2ef9e94c9..7241f6803789a0ac0a37942268c8d91610c6351b 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);