Files
ueforth/examples/udp.fs
Brad Nelson 26638fd68d Tweak udp.
2022-08-12 23:22:46 -07:00

57 lines
1.3 KiB
Forth

#! /usr/bin/env ueforth
also sockets
also tasks
1024 constant max-msg
create msg max-msg allot
variable len max-msg len !
-1 value sockfd
sockaddr incoming
sockaddr outgoing
sockaddr received
variable received-len sizeof(sockaddr_in) received-len !
: reader
begin
sockfd msg len 0 received received-len recvfrom
dup 0 >= if
received ->addr@ ip. ." :" received ->port@ . space space msg swap type cr
else drop then
pause
again
;
' reader 10 10 task reader-task
: udp ( port -- )
incoming ->port!
AF_INET SOCK_DGRAM 0 socket to sockfd
sockfd non-block throw
sockfd incoming sizeof(sockaddr_in) bind throw
reader-task start-task
;
: say ( port -- "host" )
bl parse s>z gethostbyname ->h_addr outgoing ->addr!
outgoing ->port!
sockfd tib >in @ + #tib @ >in @ -
0 outgoing sizeof(sockaddr_in) sendto drop
#tib @ >in !
;
: hear begin pause again ;
: help
." USAGE INSTRUCTIONS" cr
." ------------------" cr
." <port> udp ( open UDP connection on port )" cr
." hear ( wait for messages on udp port and print then )" cr
." <port> say <host> <message text> ( send a message to a port )" cr
cr
." Example: 9999 udp hear ( listener )" cr
." Example: 9998 udp 9999 say localhost Can you hear me? ( sender )" cr
;
help quit