summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Moffett <ian@osmora.org>2025-08-04 17:54:46 -0400
committerIan Moffett <ian@osmora.org>2025-08-04 17:54:46 -0400
commitb3f3697c9f2d63fe280a0954294ff9a2c56a6b71 (patch)
tree52275a774dd2313d744fb234e4f94db06a68348d
parent9d7a5e997cf4d34f964c59128f0f363f2c8951eb (diff)
kernel: socket: Refactor recv() impl
Signed-off-by: Ian Moffett <ian@osmora.org>
-rw-r--r--sys/kern/kern_socket.c8
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;
}
/*