non-writeable states are always non-blockable from a write() POV.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20653 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Hugo Santos 2007-04-11 14:58:39 +00:00
parent 33dda9c275
commit 83ecc79510
1 changed files with 13 additions and 3 deletions

View File

@ -64,7 +64,7 @@ enum {
FLAG_OPTION_WINDOW_SHIFT = 0x01,
FLAG_OPTION_TIMESTAMP = 0x02,
// TODO: Should FLAG_NO_RECEIVE apply as well to received connections?
// That is, what is excepected from accept() after a shutdown()
// That is, what is expected from accept() after a shutdown()
// is performed on a listen()ing socket.
FLAG_NO_RECEIVE = 0x04,
};
@ -540,8 +540,18 @@ ssize_t
TCPEndpoint::SendAvailable()
{
RecursiveLocker locker(fLock);
TRACE("SendAvailable(): %li", fSendQueue.Free());
return fSendQueue.Free();
ssize_t available;
if (fState == FINISH_SENT || fState == FINISH_ACKNOWLEDGED
|| fState == CLOSING || fState == WAIT_FOR_FINISH_ACKNOWLEDGE
|| fState == TIME_WAIT || fState == LISTEN || fState == CLOSED)
available = EPIPE;
else
available = fSendQueue.Free();
TRACE("SendAvailable(): %li", available);
return available;
}