|
@@ -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, 2)
|
|
|
|
|
|
+ sync.wait_group_add(&wg, 1)
|
|
|
|
|
|
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)
|
|
}
|
|
}
|
|
|
|
|