unix: sendmsg should return EPIPE after close
https://pubs.opengroup.org/onlinepubs/9699919799/functions/sendmsg.html "[EPIPE] ... the socket is connection-mode and is no longer connected." Change-Id: I6728b088d2f717b769697218edf26c76c59f488e Reviewed-on: https://review.haiku-os.org/c/haiku/+/3816 Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
This commit is contained in:
parent
f0c4b0a69a
commit
10ff9c6a14
@ -48,7 +48,8 @@ UnixEndpoint::UnixEndpoint(net_socket* socket)
|
|||||||
fReceiveFifo(NULL),
|
fReceiveFifo(NULL),
|
||||||
fState(UNIX_ENDPOINT_CLOSED),
|
fState(UNIX_ENDPOINT_CLOSED),
|
||||||
fAcceptSemaphore(-1),
|
fAcceptSemaphore(-1),
|
||||||
fIsChild(false)
|
fIsChild(false),
|
||||||
|
fWasConnected(false)
|
||||||
{
|
{
|
||||||
TRACE("[%" B_PRId32 "] %p->UnixEndpoint::UnixEndpoint()\n",
|
TRACE("[%" B_PRId32 "] %p->UnixEndpoint::UnixEndpoint()\n",
|
||||||
find_thread(NULL), this);
|
find_thread(NULL), this);
|
||||||
@ -383,6 +384,7 @@ UnixEndpoint::Connect(const struct sockaddr *_address)
|
|||||||
peerFifoDeleter.Detach();
|
peerFifoDeleter.Detach();
|
||||||
|
|
||||||
fState = UNIX_ENDPOINT_CONNECTED;
|
fState = UNIX_ENDPOINT_CONNECTED;
|
||||||
|
fWasConnected = true;
|
||||||
|
|
||||||
gSocketModule->set_connected(newSocket);
|
gSocketModule->set_connected(newSocket);
|
||||||
|
|
||||||
@ -802,7 +804,7 @@ UnixEndpoint::_LockConnectedEndpoints(UnixEndpointLocker& locker,
|
|||||||
UnixEndpointLocker& peerLocker)
|
UnixEndpointLocker& peerLocker)
|
||||||
{
|
{
|
||||||
if (fState != UNIX_ENDPOINT_CONNECTED)
|
if (fState != UNIX_ENDPOINT_CONNECTED)
|
||||||
RETURN_ERROR(ENOTCONN);
|
RETURN_ERROR(fWasConnected ? EPIPE : ENOTCONN);
|
||||||
|
|
||||||
// We need to lock the peer, too. Get a reference -- we might need to
|
// We need to lock the peer, too. Get a reference -- we might need to
|
||||||
// unlock ourselves to get the locking order right.
|
// unlock ourselves to get the locking order right.
|
||||||
|
@ -119,6 +119,7 @@ private:
|
|||||||
sem_id fAcceptSemaphore;
|
sem_id fAcceptSemaphore;
|
||||||
ucred fCredentials;
|
ucred fCredentials;
|
||||||
bool fIsChild;
|
bool fIsChild;
|
||||||
|
bool fWasConnected;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // UNIX_ENDPOINT_H
|
#endif // UNIX_ENDPOINT_H
|
||||||
|
Loading…
Reference in New Issue
Block a user