diff options
author | Ian Moffett <ian@osmora.org> | 2025-08-04 17:54:46 -0400 |
---|---|---|
committer | Ian Moffett <ian@osmora.org> | 2025-08-04 17:54:46 -0400 |
commit | b3f3697c9f2d63fe280a0954294ff9a2c56a6b71 (patch) | |
tree | 52275a774dd2313d744fb234e4f94db06a68348d /sys/kern | |
parent | 9d7a5e997cf4d34f964c59128f0f363f2c8951eb (diff) |
kernel: socket: Refactor recv() impl
Signed-off-by: Ian Moffett <ian@osmora.org>
Diffstat (limited to 'sys/kern')
-rw-r--r-- | sys/kern/kern_socket.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/sys/kern/kern_socket.c b/sys/kern/kern_socket.c index 66c4533..333c72e 100644 --- a/sys/kern/kern_socket.c +++ b/sys/kern/kern_socket.c @@ -264,6 +264,7 @@ recv(int sockfd, void *buf, size_t len, int flags) struct sockbuf *sbuf; struct netbuf *netbuf; size_t head; + ssize_t retval = len; int error; /* Length cannot be zero */ @@ -283,7 +284,8 @@ recv(int sockfd, void *buf, size_t len, int flags) if (netbuf->len == 0) { sbuf->head = 0; sbuf->tail = 0; - return -EAGAIN; + retval = -EAGAIN; + goto done; } if (len > netbuf->len) { @@ -292,10 +294,10 @@ recv(int sockfd, void *buf, size_t len, int flags) head = sbuf->head; memcpy(buf, &netbuf->data[head], len); - sbuf->head = (sbuf->head + len) % NETBUF_LEN; +done: mutex_release(ksock->mtx); - return len; + return retval; } /* |