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);