os

An operating system
git clone https://erai.gay/code/os/
Log | Files | Refs | README | LICENSE

commit 9c75c05dd658664db57cb1cda07dacbb6ed8aca7
parent bb5d24687081b90d7d253bab111b6f92b077413f
Author: erai <erai@omiltem.net>
Date:   Wed,  8 May 2024 19:35:02 -0400

tcp can fail

Diffstat:
Mkernel.c | 15++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/kernel.c b/kernel.c @@ -2203,7 +2203,9 @@ tcp_echo(tcb: *tcp_state) { len = 4096 - tcb.send_len; len = tcp_recv(tcb, buf, len); - tcp_send(tcb, buf, len); + if len >= 0 { + tcp_send(tcb, buf, len); + } free(buf); } @@ -2213,6 +2215,7 @@ task_ssh(t: *task) { var buf: *byte; var c: byte; var n: int; + var m: int; tcb = t.a:*tcp_state; kputs("accept\n"); buf = alloc(); @@ -2234,12 +2237,14 @@ task_ssh(t: *task) { } // echo + n = tcp_recv(tcb, buf, 4096); loop { - n = tcp_recv(tcb, buf, 4096); - if n == 0 { + m = tcp_send(tcb, buf, n); + if n == 0 || m < 0 { break; } - tcp_send(tcb, buf, n); + n = n - m; + memcpy(buf, &buf[n], n); } } free(buf); @@ -2629,7 +2634,7 @@ tcp_send(tcb: *tcp_state, b: *byte, n: int): int { if tcb.state != TCP_ESTAB || n < 0 { wrflags(flags); - return 0; + return -1; } cap = 4096 - tcb.send_len;