Make sure we are listening before starting the client

This commit is contained in:
Laytan Laats
2024-02-20 23:54:11 +01:00
parent 9e417592e3
commit e6bd79c882
+10 -15
View File
@@ -388,12 +388,8 @@ client_sends_server_data :: proc(t: ^testing.T) {
tcp_client :: proc(thread_data: rawptr) { tcp_client :: proc(thread_data: rawptr) {
r := transmute(^Thread_Data)thread_data r := transmute(^Thread_Data)thread_data
log(r.t, "tcp_client entry")
defer log(r.t, "tcp_client exit")
defer sync.wait_group_done(r.wg) defer sync.wait_group_done(r.wg)
log(r.t, "tcp_client dial")
if r.skt, r.err = net.dial_tcp(ENDPOINT); r.err != nil { if r.skt, r.err = net.dial_tcp(ENDPOINT); r.err != nil {
log(r.t, r.err) log(r.t, r.err)
return return
@@ -401,24 +397,23 @@ client_sends_server_data :: proc(t: ^testing.T) {
net.set_option(r.skt, .Send_Timeout, SEND_TIMEOUT) net.set_option(r.skt, .Send_Timeout, SEND_TIMEOUT)
log(r.t, "tcp_client send")
_, r.err = net.send(r.skt, transmute([]byte)CONTENT) _, r.err = net.send(r.skt, transmute([]byte)CONTENT)
} }
tcp_server :: proc(thread_data: rawptr) { tcp_server :: proc(thread_data: rawptr) {
r := transmute(^Thread_Data)thread_data r := transmute(^Thread_Data)thread_data
log(r.t, "tcp_server entry")
defer log(r.t, "tcp_server exit")
defer sync.wait_group_done(r.wg) defer sync.wait_group_done(r.wg)
log(r.t, "tcp_server listen") log(r.t, "tcp_server listen")
if r.skt, r.err = net.listen_tcp(ENDPOINT); r.err != nil { if r.skt, r.err = net.listen_tcp(ENDPOINT); r.err != nil {
sync.wait_group_done(r.wg)
log(r.t, r.err) log(r.t, r.err)
return return
} }
sync.wait_group_done(r.wg)
log(r.t, "tcp_server accept") log(r.t, "tcp_server accept")
client: net.TCP_Socket client: net.TCP_Socket
if client, _, r.err = net.accept_tcp(r.skt.(net.TCP_Socket)); r.err != nil { if client, _, r.err = net.accept_tcp(r.skt.(net.TCP_Socket)); r.err != nil {
@@ -429,7 +424,6 @@ client_sends_server_data :: proc(t: ^testing.T) {
net.set_option(client, .Receive_Timeout, RECV_TIMEOUT) net.set_option(client, .Receive_Timeout, RECV_TIMEOUT)
log(r.t, "tcp_server recv")
r.length, r.err = net.recv_tcp(client, r.data[:]) r.length, r.err = net.recv_tcp(client, r.data[:])
return return
} }
@@ -437,26 +431,27 @@ client_sends_server_data :: proc(t: ^testing.T) {
thread_data := [2]Thread_Data{} thread_data := [2]Thread_Data{}
wg: sync.Wait_Group wg: sync.Wait_Group
sync.wait_group_add(&wg, 1)
sync.wait_group_add(&wg, 2)
thread_data[0].t = t thread_data[0].t = t
thread_data[0].wg = &wg thread_data[0].wg = &wg
thread_data[0].tid = thread.create_and_start_with_data(&thread_data[0], tcp_server, context) thread_data[0].tid = thread.create_and_start_with_data(&thread_data[0], tcp_server, context)
log(t, "waiting for server to start listening")
sync.wait_group_wait(&wg)
log(t, "starting up client")
sync.wait_group_add(&wg, 2)
thread_data[1].t = t thread_data[1].t = t
thread_data[1].wg = &wg thread_data[1].wg = &wg
thread_data[1].tid = thread.create_and_start_with_data(&thread_data[1], tcp_client, context) thread_data[1].tid = thread.create_and_start_with_data(&thread_data[1], tcp_client, context)
defer { defer {
log(t, "closing server socket")
net.close(thread_data[0].skt) net.close(thread_data[0].skt)
log(t, "destroying server thread")
thread.destroy(thread_data[0].tid) thread.destroy(thread_data[0].tid)
log(t, "closing client socket")
net.close(thread_data[1].skt) net.close(thread_data[1].skt)
log(t, "destroying client thread")
thread.destroy(thread_data[1].tid) thread.destroy(thread_data[1].tid)
} }