summaryrefslogtreecommitdiff
path: root/userland/libc/sys/socket/recvfrom.c
diff options
context:
space:
mode:
authorAnton Kling <anton@kling.gg>2023-10-27 22:17:24 +0200
committerAnton Kling <anton@kling.gg>2023-10-30 21:49:48 +0100
commitd50d18c9da3a125f0196bec89802dec1c5b0b800 (patch)
treed9a4e74906c5ab51708d148ad3728cc155a9893d /userland/libc/sys/socket/recvfrom.c
parent4f9ed7087cb58683d9423ab771ad76b31dac5514 (diff)
Kernel/LibC/Networking: Be able to send UDP messages
Now it can send UDP messages to a specific IP address and libc has enough to create a basic UDP ECHO server, that is kinda cool.
Diffstat (limited to 'userland/libc/sys/socket/recvfrom.c')
-rw-r--r--userland/libc/sys/socket/recvfrom.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/userland/libc/sys/socket/recvfrom.c b/userland/libc/sys/socket/recvfrom.c
new file mode 100644
index 0000000..5bbfeea
--- /dev/null
+++ b/userland/libc/sys/socket/recvfrom.c
@@ -0,0 +1,17 @@
+#include <assert.h>
+#include <sys/socket.h>
+#include <syscall.h>
+
+struct two_args {
+ uint32_t a;
+ uint32_t b;
+};
+
+size_t recvfrom(int socket, void *buffer, size_t length, int flags,
+ struct sockaddr *address, socklen_t *address_len) {
+ struct two_args extra_args;
+ extra_args.a = address;
+ extra_args.b = address_len;
+
+ return syscall(SYS_RECVFROM, socket, buffer, length, flags, &extra_args);
+}