summaryrefslogtreecommitdiff
path: root/kernel/socket.c
diff options
context:
space:
mode:
authorAnton Kling <anton@kling.gg>2024-04-28 21:39:53 +0200
committerAnton Kling <anton@kling.gg>2024-04-28 21:40:39 +0200
commit507062d51b3e018fdfac838e7982ffe62ff423c5 (patch)
tree9ed18a03fd2c35329525872f2aabe2455a7a6236 /kernel/socket.c
parent7695cb9ca77a32aae75cf0d2bcea9769cd938615 (diff)
Kernel: Use ringbuffer for handling incoming socket data
Diffstat (limited to 'kernel/socket.c')
-rw-r--r--kernel/socket.c13
1 files changed, 4 insertions, 9 deletions
diff --git a/kernel/socket.c b/kernel/socket.c
index d3dfd1a..e0c3f35 100644
--- a/kernel/socket.c
+++ b/kernel/socket.c
@@ -80,7 +80,7 @@ struct TcpConnection *internal_tcp_incoming(u32 src_ip, u16 src_port,
con->incoming_port = dst_port; // FIXME: Should be different for each
// connection
- con->data_file = create_fifo_object();
+ ringbuffer_init(&con->buffer, 8192);
stack_push(&listen->incoming_connections, (void *)connection_id);
return con;
}
@@ -141,7 +141,7 @@ u32 tcp_connect_ipv4(u32 ip, u16 port, int *error) {
con->outgoing_ip = ip;
con->outgoing_port = port;
- con->data_file = create_fifo_object();
+ ringbuffer_init(&con->buffer, 8192);
tcp_send_syn(con);
@@ -190,14 +190,9 @@ int tcp_read(u32 socket, u8 *buffer, u64 buffer_size, u64 *out) {
return 0;
}
- int rc = fifo_object_read(buffer, 0, buffer_size, con->data_file);
- if (rc <= 0) {
- enable_interrupts();
- rc = 0;
- return 0;
- }
+ u32 len = ringbuffer_read(&con->buffer, buffer, buffer_size);
if (out) {
- *out = rc;
+ *out = len;
}
return 1;
}