Skip to content

Commit e7474fd

Browse files
committed
nbio: stop receiving when connection is closed
1 parent ccfafd9 commit e7474fd

File tree

1 file changed

+8
-1
lines changed

1 file changed

+8
-1
lines changed

nbio/tcp-echo/main.odin

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ package main
1010
import "core:container/xar"
1111
import "core:fmt"
1212
import "core:nbio"
13+
import log "core:log"
1314

1415
Server :: struct {
1516
socket: nbio.TCP_Socket,
@@ -24,13 +25,14 @@ Connection :: struct {
2425
}
2526

2627
main :: proc() {
28+
context.logger = log.create_console_logger()
2729
err := nbio.acquire_thread_event_loop()
2830
fmt.assertf(err == nil, "Could not initialize nbio: %v", err)
2931
defer nbio.release_thread_event_loop()
3032

3133
server: Server
3234

33-
socket, listen_err := nbio.listen_tcp({nbio.IP4_Loopback, 1234})
35+
socket, listen_err := nbio.listen_tcp({nbio.IP4_Any, 1234})
3436
fmt.assertf(listen_err == nil, "Error listening on localhost:1234: %v", err)
3537
server.socket = socket
3638

@@ -57,6 +59,11 @@ on_accept :: proc(op: ^nbio.Operation, server: ^Server) {
5759

5860
on_recv :: proc(op: ^nbio.Operation, connection: ^Connection) {
5961
fmt.assertf(op.recv.err == nil, "Error receiving from client: %v", op.recv.err)
62+
if op.recv.received == 0 {
63+
// NOTE: leaking `connection`.
64+
nbio.close(connection.sock)
65+
return
66+
}
6067

6168
nbio.send_poly(connection.sock, {connection.buf[:op.recv.received]}, connection, on_sent)
6269
}

0 commit comments

Comments
 (0)