From 2416d6ae42b5f0fab8e9d977ed454c9278990074 Mon Sep 17 00:00:00 2001 From: Michael Lotz Date: Tue, 19 Jan 2010 04:31:35 +0000 Subject: [PATCH] anevilyak+mmlr: accept() is supposed to return B_WOULD_BLOCK when SO_NONBLOCK is set. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35154 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp b/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp index b79886708b..6fd09f6182 100644 --- a/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp +++ b/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp @@ -673,8 +673,12 @@ TCPEndpoint::Accept(struct net_socket** _acceptedSocket) status = acquire_sem_etc(fAcceptSemaphore, 1, B_ABSOLUTE_TIMEOUT | B_CAN_INTERRUPT, timeout); - if (status != B_OK) + if (status != B_OK) { + if (status == B_TIMED_OUT && socket->receive.timeout == 0) + return B_WOULD_BLOCK; + return status; + } locker.Lock(); status = gSocketModule->dequeue_connected(socket, _acceptedSocket);