Skip to content

Commit c5e159b

Browse files
committed
FIX: missing messages in UDP server
related to: Oldes/Rebol-issues#1803
1 parent 40632bc commit c5e159b

File tree

4 files changed

+50
-27
lines changed

4 files changed

+50
-27
lines changed

src/core/p-net.c

+1
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,7 @@ enum Transport_Types {
217217
//Print("(max read length %d)", sock->length);
218218
result = OS_DO_DEVICE(sock, RDC_READ); // recv can happen immediately
219219
if (result < 0) Trap_Port(RE_READ_ERROR, port, sock->error);
220+
VAL_TAIL(arg) += sock->actual;
220221
break;
221222

222223
case A_WRITE:

src/tests/test-udp-client.r3

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
Rebol [
2+
Title: "Test UDP client"
3+
File: %test-udp-client.r3
4+
Note: https://github.com/Oldes/Rebol-issues/issues/1803
5+
]
6+
7+
; start test UDP server...
8+
launch probe to-real-file %test-udp-server.r3
9+
10+
; wait some time for server to boot...
11+
wait 0:0:0.1
12+
13+
stdout: system/ports/output
14+
15+
; open port for output...
16+
port: open udp://127.0.0.1:1189
17+
port/awake: func[event][
18+
print ["[UDP Client] event:" event/type]
19+
;; console output is buffered and so messages could come out of order;
20+
;; to prevent it, just use the `flush`!
21+
flush stdout
22+
true
23+
]
24+
; wait for port to be opened (required on Windows!)...
25+
wait port
26+
27+
write-udp: func[msg [string!]][
28+
print ["[UDP Client] sending:" as-yellow mold msg]
29+
flush stdout ;= flush console buffer!
30+
write port msg
31+
]
32+
write-udp "Hello"
33+
write-udp "Rebol"
34+
wait 1 ;= pretending some work here...
35+
write-udp "I'm done!"
36+
write-udp "quit"
37+
38+
either system/options/script [
39+
ask as-red "CLIENT DONE"
40+
][ print as-red "CLIENT DONE" wait 0.5]

src/tests/test-udp-server.r3

+9-4
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,23 @@ udp-server: try/except [open udp://:1189][
1010
print as-purple "Failed to listen on UDP port 1189!"
1111
quit
1212
]
13+
stdout: system/ports/output
1314

1415
udp-server/awake: func [event] [
15-
print ["UDP event:" as-yellow event/type]
16+
print ["[UDP Server] event:" event/type]
17+
;; console output is buffered and so messages could come out of order;
18+
;; to prevent it, just use the `flush`!
19+
flush stdout
1620
true
1721
]
1822

1923
forever [
2024
wait read udp-server
2125
str: to string! udp-server/data
22-
print ["UDP input:" as-green mold str]
26+
print ["[UDP Server] received:" as-green mold str]
27+
flush stdout ;= flush console buffer!
2328
if str = "quit" [close udp-server break]
2429
clear udp-server/data
2530
]
26-
print as-red "SERVER DONE"
27-
wait 0:0:1
31+
32+
print as-red "SERVER DONE"

src/tests/test-udp.r3

-23
This file was deleted.

0 commit comments

Comments
 (0)