net/usrsock: read from the closed remote should return EOF

fix usrsock remote_disconnect fail:

nsh> usrsocktest
...
Testing group "remote_disconnect" =>
	[TEST ASSERT FAILED!]
		In function "receive":
		line 497: Assertion `(ssize_t)((ret)) == (ssize_t)((0))' failed.
			got value: -1
			should be: 0
	Group "remote_disconnect": [FAILED]
...

Reference:

RECV(2)

NAME
       recv, recvfrom, recvmsg - receive a message from a socket
...
RETURN VALUE
...
       When a stream socket peer has performed an orderly shutdown,
       the return value will be 0 (the traditional "end-of-file" return).

       Datagram sockets in various domains (e.g., the UNIX and Internet domains)
       permit zero-length datagrams.  When such a datagram is received, the return value is 0.

Signed-off-by: chao an <anchao@xiaomi.com>
This commit is contained in:
chao an 2022-08-31 22:10:36 +08:00 committed by Masayuki Ishikawa
parent fe7badf2ac
commit 3a653c1d5e

View File

@ -442,6 +442,12 @@ errout_unlock:
*fromlen = outaddrlen;
}
if (conn->flags & USRSOCK_EVENT_REMOTE_CLOSED &&
ret == -ENOTCONN)
{
ret = OK;
}
return ret;
}