A first step to query UDP
This commit is contained in:
parent
6f49424fb0
commit
757656573a
2 changed files with 68 additions and 5 deletions
|
@ -63,11 +63,19 @@
|
||||||
(domain->int af)
|
(domain->int af)
|
||||||
src dst))
|
src dst))
|
||||||
|
|
||||||
(define (htons host)
|
(define (inet_ntop af src dst size)
|
||||||
((foreign-procedure
|
((foreign-procedure
|
||||||
"htons"
|
"inet_ntop"
|
||||||
(short)
|
(int void* (* char) int)
|
||||||
short) host))
|
void*)
|
||||||
|
(domain->int af)
|
||||||
|
src dst size))
|
||||||
|
|
||||||
|
(define (htons host)
|
||||||
|
((foreign-procedure "htons" (short) short) host))
|
||||||
|
|
||||||
|
(define (ntohs net)
|
||||||
|
((foreign-procedure "ntohs" (short) short) net))
|
||||||
|
|
||||||
(define (setsockopt sockfd level optname optval optlen)
|
(define (setsockopt sockfd level optname optval optlen)
|
||||||
((foreign-procedure
|
((foreign-procedure
|
||||||
|
@ -85,4 +93,25 @@
|
||||||
(int void* int)
|
(int void* int)
|
||||||
int) sockfd address address_len))
|
int) sockfd address address_len))
|
||||||
|
|
||||||
|
(define (listen sockfd backlog)
|
||||||
|
((foreign-procedure
|
||||||
|
"listen"
|
||||||
|
(int int)
|
||||||
|
int) sockfd backlog))
|
||||||
|
|
||||||
|
(define (msgflag->int flag)
|
||||||
|
(case flag
|
||||||
|
((MSG_DEFAULT) 0)
|
||||||
|
))
|
||||||
|
|
||||||
|
(define (recvfrom sockfd buf len msgflag src-addr addrlen)
|
||||||
|
((foreign-procedure
|
||||||
|
"recvfrom"
|
||||||
|
(int void* int int (* sockaddr_in) (* int))
|
||||||
|
int)
|
||||||
|
sockfd
|
||||||
|
buf
|
||||||
|
len
|
||||||
|
(msgflag->int msgflag)
|
||||||
|
src-addr
|
||||||
|
addrlen))
|
||||||
|
|
|
@ -51,8 +51,42 @@
|
||||||
(ftype-pointer-address addr)
|
(ftype-pointer-address addr)
|
||||||
(ftype-sizeof sockaddr_in))))))
|
(ftype-sizeof sockaddr_in))))))
|
||||||
|
|
||||||
|
(define (udpsock-readblock sock fx)
|
||||||
|
(let*
|
||||||
|
([bufsize 1500] [straddrsize 255]
|
||||||
|
[buf (foreign-alloc bufsize)]
|
||||||
|
[straddr (make-ftype-pointer
|
||||||
|
char
|
||||||
|
(foreign-alloc straddrsize))]
|
||||||
|
[addrlen (make-ftype-pointer
|
||||||
|
int
|
||||||
|
(foreign-alloc (ftype-sizeof int)))]
|
||||||
|
[addr (make-ftype-pointer
|
||||||
|
sockaddr_in
|
||||||
|
(foreign-alloc (ftype-sizeof sockaddr_in)))]
|
||||||
|
[nread (recvfrom sock buf bufsize 'MSG_DEFAULT addr addrlen)])
|
||||||
|
|
||||||
|
; FIXME add a loop and check fx output to know if we continue
|
||||||
|
(fx
|
||||||
|
(inet_ntop
|
||||||
|
'AF_INET
|
||||||
|
(ftype-pointer-address
|
||||||
|
(ftype-&ref sockaddr_in (sin_addr) addr))
|
||||||
|
straddr
|
||||||
|
straddrsize)
|
||||||
|
(ntohs (ftype-ref sockaddr_in (sin_port) addr))
|
||||||
|
buf nread)
|
||||||
|
|
||||||
|
(foreign-free (ftype-pointer-address straddr))
|
||||||
|
(foreign-free (ftype-pointer-address addrlen))
|
||||||
|
(foreign-free (ftype-pointer-address addr))
|
||||||
|
(foreign-free buf)))
|
||||||
|
|
||||||
(udpsock-create
|
(udpsock-create
|
||||||
(lambda (sock)
|
(lambda (sock)
|
||||||
(udpsock-reuseaddr sock)
|
(udpsock-reuseaddr sock)
|
||||||
(udpsock-bind sock "0.0.0.0" 1337)
|
(udpsock-bind sock "0.0.0.0" 1337)
|
||||||
(printf "~a~%" sock)))
|
(udpsock-readblock
|
||||||
|
sock
|
||||||
|
(lambda (host port buf size)
|
||||||
|
))))
|
||||||
|
|
Loading…
Reference in a new issue