Update srfi-106 to use newest (foreign c)
This commit is contained in:
parent
06fc8871a8
commit
0cba23d93c
|
|
@ -1,3 +1,4 @@
|
||||||
*.tgz
|
*.tgz
|
||||||
venv
|
venv
|
||||||
*.html
|
*.html
|
||||||
|
*.log
|
||||||
|
|
|
||||||
8
Makefile
8
Makefile
|
|
@ -29,11 +29,11 @@ install:
|
||||||
uninstall:
|
uninstall:
|
||||||
-snow-chibi remove --impls=${SCHEME} ${PKG}
|
-snow-chibi remove --impls=${SCHEME} ${PKG}
|
||||||
|
|
||||||
init-venv: build
|
run-test-venv: build
|
||||||
rm -rf venv
|
rm -rf venv
|
||||||
scheme-venv ${SCHEME} ${RNRS} venv
|
scheme-venv ${SCHEME} ${RNRS} venv
|
||||||
echo "(import (scheme base) (scheme write) (scheme read) (scheme char) (scheme file) (scheme process-context) (srfi 64) (srfi ${SRFI}))" > venv/test.scm
|
echo "(import (scheme base) (scheme write) (scheme read) (scheme char) (scheme file) (scheme process-context) (srfi 64) (foreign c) (srfi ${SRFI}))" > venv/test.scm
|
||||||
printf "#!r6rs\n(import (rnrs) (srfi :64) (srfi :${SRFI}))" > venv/test.sps
|
printf "#!r6rs\n(import (rnrs) (srfi :64) (foreign c) (srfi :${SRFI}))" > venv/test.sps
|
||||||
cat ${TESTFILE} >> venv/test.scm
|
cat ${TESTFILE} >> venv/test.scm
|
||||||
cat ${TESTFILE} >> venv/test.sps
|
cat ${TESTFILE} >> venv/test.sps
|
||||||
if [ "${RNRS}" = "r6rs" ]; then if [ -d ../foreign-c ]; then cp -r ../foreign-c/foreign venv/lib/; fi; fi
|
if [ "${RNRS}" = "r6rs" ]; then if [ -d ../foreign-c ]; then cp -r ../foreign-c/foreign venv/lib/; fi; fi
|
||||||
|
|
@ -46,8 +46,6 @@ init-venv: build
|
||||||
if [ "${SCHEME}" = "chicken" ]; then ./venv/bin/snow-chibi install --always-yes srfi.64; fi
|
if [ "${SCHEME}" = "chicken" ]; then ./venv/bin/snow-chibi install --always-yes srfi.64; fi
|
||||||
if [ "${SCHEME}-${RNRS}" = "mosh-r7rs" ]; then ./venv/bin/snow-chibi install --always-yes srfi.64; fi
|
if [ "${SCHEME}-${RNRS}" = "mosh-r7rs" ]; then ./venv/bin/snow-chibi install --always-yes srfi.64; fi
|
||||||
if [ "${RNRS}" = "r7rs" ]; then ./venv/bin/snow-chibi install ${PKG}; fi
|
if [ "${RNRS}" = "r7rs" ]; then ./venv/bin/snow-chibi install ${PKG}; fi
|
||||||
|
|
||||||
run-test: init-venv
|
|
||||||
if [ "${RNRS}" = "r6rs" ]; then ./venv/bin/scheme-compile venv/test.sps; fi
|
if [ "${RNRS}" = "r6rs" ]; then ./venv/bin/scheme-compile venv/test.sps; fi
|
||||||
if [ "${RNRS}" = "r7rs" ]; then CSC_OPTIONS="-L -lcurl" ./venv/bin/scheme-compile venv/test.scm; fi
|
if [ "${RNRS}" = "r7rs" ]; then CSC_OPTIONS="-L -lcurl" ./venv/bin/scheme-compile venv/test.scm; fi
|
||||||
./venv/test
|
./venv/test
|
||||||
|
|
|
||||||
50
srfi/106.scm
50
srfi/106.scm
|
|
@ -1,5 +1,5 @@
|
||||||
(define-c-library libc
|
(define-c-library libc
|
||||||
`("sys/types.h"
|
'("sys/types.h"
|
||||||
"sys/socket.h"
|
"sys/socket.h"
|
||||||
"sys/un.h"
|
"sys/un.h"
|
||||||
"netinet/in.h"
|
"netinet/in.h"
|
||||||
|
|
@ -8,8 +8,8 @@
|
||||||
"fcntl.h"
|
"fcntl.h"
|
||||||
"poll.h"
|
"poll.h"
|
||||||
"string.h")
|
"string.h")
|
||||||
libc-name
|
#f
|
||||||
'((additional-versions ("0" "6"))))
|
'())
|
||||||
|
|
||||||
(define-c-procedure c-socket libc 'socket 'int '(int int int))
|
(define-c-procedure c-socket libc 'socket 'int '(int int int))
|
||||||
(define-c-procedure c-setsockopt libc 'setsockopt 'int '(int int int pointer int))
|
(define-c-procedure c-setsockopt libc 'setsockopt 'int '(int int int pointer int))
|
||||||
|
|
@ -103,8 +103,8 @@
|
||||||
(call-with-address-of
|
(call-with-address-of
|
||||||
addrinfo-hints
|
addrinfo-hints
|
||||||
(lambda (addrinfo-hints-address)
|
(lambda (addrinfo-hints-address)
|
||||||
(c-getaddrinfo (string->c-utf8 node)
|
(c-getaddrinfo (string->c-bytevector node)
|
||||||
(string->c-utf8 service)
|
(string->c-bytevector service)
|
||||||
addrinfo-hints
|
addrinfo-hints
|
||||||
addrinfo-address))))))
|
addrinfo-address))))))
|
||||||
(socket-file-descriptor
|
(socket-file-descriptor
|
||||||
|
|
@ -113,13 +113,13 @@
|
||||||
(c-bytevector-ref addrinfo 'int ai-socktype-offset)
|
(c-bytevector-ref addrinfo 'int ai-socktype-offset)
|
||||||
(c-bytevector-ref addrinfo 'int ai-protocol-offset))))
|
(c-bytevector-ref addrinfo 'int ai-protocol-offset))))
|
||||||
(when (< addrinfo-result 0)
|
(when (< addrinfo-result 0)
|
||||||
(c-perror (string->c-utf8 "make-client-socket (addrinfo) error"))
|
(c-perror (string->c-bytevector "make-client-socket (addrinfo) error"))
|
||||||
(raise-continuable "make-client-socket (addrinfo) error"))
|
(raise-continuable "make-client-socket (addrinfo) error"))
|
||||||
(when (< socket-file-descriptor 0)
|
(when (< socket-file-descriptor 0)
|
||||||
(c-perror (string->c-utf8 "make-client-socket (socket) error"))
|
(c-perror (string->c-bytevector "make-client-socket (socket) error"))
|
||||||
(raise-continuable "make-client-socket (socket) error"))
|
(raise-continuable "make-client-socket (socket) error"))
|
||||||
(when (< (c-fcntl socket-file-descriptor F-SETFL O-NONBLOCK) 0)
|
(when (< (c-fcntl socket-file-descriptor F-SETFL O-NONBLOCK) 0)
|
||||||
(c-perror (string->c-utf8 "make-client-socket (fcntl) error"))
|
(c-perror (string->c-bytevector "make-client-socket (fcntl) error"))
|
||||||
(raise-continuable "make-client-socket (fcntl) error"))
|
(raise-continuable "make-client-socket (fcntl) error"))
|
||||||
(letrec* ((ai-addr-offset (* (c-type-size 'int) 6))
|
(letrec* ((ai-addr-offset (* (c-type-size 'int) 6))
|
||||||
(ai-addrlen-offset (* (c-type-size 'int) 4))
|
(ai-addrlen-offset (* (c-type-size 'int) 4))
|
||||||
|
|
@ -132,7 +132,7 @@
|
||||||
(c-bytevector-set! pollfd 'int 0 0)
|
(c-bytevector-set! pollfd 'int 0 0)
|
||||||
;; FIXME No magic numbers, like 8 or 1 here. Put into variable with good name
|
;; FIXME No magic numbers, like 8 or 1 here. Put into variable with good name
|
||||||
;; TODO Why 8 works but 1 does not?
|
;; TODO Why 8 works but 1 does not?
|
||||||
(when (= (c-poll pollfd 8 5000) 0)
|
#;(when (= (c-poll pollfd 8 5000) 0)
|
||||||
(error "make-client-socket (poll) error")))
|
(error "make-client-socket (poll) error")))
|
||||||
(make-socket socket-file-descriptor))))
|
(make-socket socket-file-descriptor))))
|
||||||
|
|
||||||
|
|
@ -153,7 +153,7 @@
|
||||||
(msg-len (bytevector-length bv))
|
(msg-len (bytevector-length bv))
|
||||||
(sent-count (c-send (socket-file-descriptor socket) msg msg-len 0)))
|
(sent-count (c-send (socket-file-descriptor socket) msg msg-len 0)))
|
||||||
(when (= sent-count -1)
|
(when (= sent-count -1)
|
||||||
(c-perror (string->c-utf8 "socket-send error"))
|
(c-perror (string->c-bytevector "socket-send error"))
|
||||||
(raise-continuable "socket-send error"))
|
(raise-continuable "socket-send error"))
|
||||||
sent-count))
|
sent-count))
|
||||||
|
|
||||||
|
|
@ -194,26 +194,26 @@
|
||||||
(c-type-size 'u16)
|
(c-type-size 'u16)
|
||||||
(c-htons (string->number service)))
|
(c-htons (string->number service)))
|
||||||
(c-bytevector-set! pointer 'u16 (* (c-type-size 'u16) 2) INADDR-ANY)
|
(c-bytevector-set! pointer 'u16 (* (c-type-size 'u16) 2) INADDR-ANY)
|
||||||
;(c-strcpy node-pointer (string->c-utf8 node))
|
;(c-strcpy node-pointer (string->c-bytevector node))
|
||||||
pointer))
|
pointer))
|
||||||
(option (let ((pointer (make-c-bytevector (c-type-size 'int))))
|
(option (let ((pointer (make-c-bytevector (c-type-size 'int))))
|
||||||
(c-bytevector-set! pointer 'int 0 1)
|
(c-bytevector-set! pointer 'int 0 1)
|
||||||
pointer))
|
pointer))
|
||||||
(sockaddr-size (+ *ai-family-size* (bytevector-length (string->utf8 node)))))
|
(sockaddr-size (+ *ai-family-size* (bytevector-length (string->utf8 node)))))
|
||||||
(when (< socket-file-descriptor 0)
|
(when (< socket-file-descriptor 0)
|
||||||
(c-perror (string->c-utf8 "make-server-socket (socket) error"))
|
(c-perror (string->c-bytevector "make-server-socket (socket) error"))
|
||||||
(raise-continuable "make-server-socket (socket) error"))
|
(raise-continuable "make-server-socket (socket) error"))
|
||||||
(when (< (c-setsockopt socket-file-descriptor SOL-SOCKET SO-REUSEADDR option (c-type-size 'int)) 0)
|
(when (< (c-setsockopt socket-file-descriptor SOL-SOCKET SO-REUSEADDR option (c-type-size 'int)) 0)
|
||||||
(c-perror (string->c-utf8 "make-server-socket (setsockopt SO-REUSEADDR) error"))
|
(c-perror (string->c-bytevector "make-server-socket (setsockopt SO-REUSEADDR) error"))
|
||||||
(raise-continuable "make-server-socket (setsockopt SO-REUSEADDR) error"))
|
(raise-continuable "make-server-socket (setsockopt SO-REUSEADDR) error"))
|
||||||
(when (< (c-setsockopt socket-file-descriptor SOL-SOCKET SO-REUSEPORT option (c-type-size 'int)) 0)
|
(when (< (c-setsockopt socket-file-descriptor SOL-SOCKET SO-REUSEPORT option (c-type-size 'int)) 0)
|
||||||
(c-perror (string->c-utf8 "make-server-socket (setsockopt SO-REUSEPORT) error"))
|
(c-perror (string->c-bytevector "make-server-socket (setsockopt SO-REUSEPORT) error"))
|
||||||
(raise-continuable "make-server-socket (setsockopt SO-REUSEPORT) error"))
|
(raise-continuable "make-server-socket (setsockopt SO-REUSEPORT) error"))
|
||||||
(when (< (c-bind socket-file-descriptor sockaddr *sockaddr-size*) 0)
|
(when (< (c-bind socket-file-descriptor sockaddr *sockaddr-size*) 0)
|
||||||
(c-perror (string->c-utf8 "socket-accept (bind) error"))
|
(c-perror (string->c-bytevector "socket-accept (bind) error"))
|
||||||
(raise-continuable "socket-accept (bind) error"))
|
(raise-continuable "socket-accept (bind) error"))
|
||||||
(when (< (c-listen socket-file-descriptor 0) 0)
|
(when (< (c-listen socket-file-descriptor 0) 0)
|
||||||
(c-perror (string->c-utf8 "make-server-socket (listen) error"))
|
(c-perror (string->c-bytevector "make-server-socket (listen) error"))
|
||||||
(raise-continuable "make-server-socket (listen) error"))
|
(raise-continuable "make-server-socket (listen) error"))
|
||||||
(make-socket socket-file-descriptor)))
|
(make-socket socket-file-descriptor)))
|
||||||
|
|
||||||
|
|
@ -240,8 +240,8 @@
|
||||||
(call-with-address-of
|
(call-with-address-of
|
||||||
addrinfo-hints
|
addrinfo-hints
|
||||||
(lambda (addrinfo-hints-address)
|
(lambda (addrinfo-hints-address)
|
||||||
(c-getaddrinfo (string->c-utf8 "0.0.0.0")
|
(c-getaddrinfo (string->c-bytevector "0.0.0.0")
|
||||||
(string->c-utf8 service)
|
(string->c-bytevector service)
|
||||||
addrinfo-hints
|
addrinfo-hints
|
||||||
addrinfo-address))))))
|
addrinfo-address))))))
|
||||||
(socket-file-descriptor
|
(socket-file-descriptor
|
||||||
|
|
@ -257,22 +257,22 @@
|
||||||
(ai-addrlen-offset (* (c-type-size 'int) 4))
|
(ai-addrlen-offset (* (c-type-size 'int) 4))
|
||||||
(ai-addr-len (c-bytevector-ref addrinfo 'int ai-addrlen-offset)))
|
(ai-addr-len (c-bytevector-ref addrinfo 'int ai-addrlen-offset)))
|
||||||
(when (< addrinfo-result 0)
|
(when (< addrinfo-result 0)
|
||||||
(c-perror (string->c-utf8 "make-server-socket (addrinfo) error"))
|
(c-perror (string->c-bytevector "make-server-socket (addrinfo) error"))
|
||||||
(raise-continuable "make-server-socket (addrinfo) error"))
|
(raise-continuable "make-server-socket (addrinfo) error"))
|
||||||
(when (< socket-file-descriptor 0)
|
(when (< socket-file-descriptor 0)
|
||||||
(c-perror (string->c-utf8 "make-server-socket (socket) error"))
|
(c-perror (string->c-bytevector "make-server-socket (socket) error"))
|
||||||
(raise-continuable "make-server-socket (socket) error"))
|
(raise-continuable "make-server-socket (socket) error"))
|
||||||
(when (< (c-setsockopt socket-file-descriptor SOL-SOCKET SO-REUSEADDR option (c-type-size 'int)) 0)
|
(when (< (c-setsockopt socket-file-descriptor SOL-SOCKET SO-REUSEADDR option (c-type-size 'int)) 0)
|
||||||
(c-perror (string->c-utf8 "make-server-socket (setsockopt SO-REUSEADDR) error"))
|
(c-perror (string->c-bytevector "make-server-socket (setsockopt SO-REUSEADDR) error"))
|
||||||
(raise-continuable "make-server-socket (setsockopt SO-REUSEADDR) error"))
|
(raise-continuable "make-server-socket (setsockopt SO-REUSEADDR) error"))
|
||||||
(when (< (c-setsockopt socket-file-descriptor SOL-SOCKET SO-REUSEPORT option (c-type-size 'int)) 0)
|
(when (< (c-setsockopt socket-file-descriptor SOL-SOCKET SO-REUSEPORT option (c-type-size 'int)) 0)
|
||||||
(c-perror (string->c-utf8 "make-server-socket (setsockopt SO-REUSEPORT) error"))
|
(c-perror (string->c-bytevector "make-server-socket (setsockopt SO-REUSEPORT) error"))
|
||||||
(raise-continuable "make-server-socket (setsockopt SO-REUSEPORT) error"))
|
(raise-continuable "make-server-socket (setsockopt SO-REUSEPORT) error"))
|
||||||
(when (< (c-bind socket-file-descriptor ai-addr ai-addr-len) 0)
|
(when (< (c-bind socket-file-descriptor ai-addr ai-addr-len) 0)
|
||||||
(c-perror (string->c-utf8 "make-server-socket (bind) error"))
|
(c-perror (string->c-bytevector "make-server-socket (bind) error"))
|
||||||
(raise-continuable "make-server-socket (bind) error"))
|
(raise-continuable "make-server-socket (bind) error"))
|
||||||
(when (< (c-listen socket-file-descriptor 5) 0)
|
(when (< (c-listen socket-file-descriptor 5) 0)
|
||||||
(c-perror (string->c-utf8 "make-server-socket (listen) error"))
|
(c-perror (string->c-bytevector "make-server-socket (listen) error"))
|
||||||
(raise-continuable "make-server-socket (listen) error"))
|
(raise-continuable "make-server-socket (listen) error"))
|
||||||
(make-socket socket-file-descriptor))))
|
(make-socket socket-file-descriptor))))
|
||||||
|
|
||||||
|
|
@ -285,7 +285,7 @@
|
||||||
client-sockaddr
|
client-sockaddr
|
||||||
addrlen)))
|
addrlen)))
|
||||||
(when (< accepted-socket 0)
|
(when (< accepted-socket 0)
|
||||||
(c-perror (string->c-utf8 "socket-accept (accept) error"))
|
(c-perror (string->c-bytevector "socket-accept (accept) error"))
|
||||||
(raise-continuable "socket-accept (accept) error"))
|
(raise-continuable "socket-accept (accept) error"))
|
||||||
(make-socket accepted-socket)))
|
(make-socket accepted-socket)))
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,9 @@
|
||||||
|
(test-begin "srfi-106")
|
||||||
|
|
||||||
(define sock1-port "3005")
|
(define sock1-port "3005")
|
||||||
(define sock2-port "3006")
|
(define sock2-port "3006")
|
||||||
|
|
||||||
(define-c-library libc `("stdlib.h") libc-name '((additional-versions ("0" "6"))))
|
(define-c-library libc `("stdlib.h") #f '())
|
||||||
(define-c-procedure c-system libc 'system 'int '(pointer))
|
(define-c-procedure c-system libc 'system 'int '(pointer))
|
||||||
|
|
||||||
(display "Testing TCP socket")
|
(display "Testing TCP socket")
|
||||||
|
|
@ -13,7 +14,7 @@
|
||||||
;(debug (socket-domain stream))
|
;(debug (socket-domain stream))
|
||||||
;(debug (ip-protocol ip))
|
;(debug (ip-protocol ip))
|
||||||
|
|
||||||
(c-system (string->c-utf8 (string-append "echo \"lol\" | nc -l " sock1-port "&")))
|
(c-system (string->c-bytevector (string-append "echo \"lol\" | nc -l " sock1-port "&")))
|
||||||
|
|
||||||
(define sock1 (make-client-socket "127.0.0.1" sock1-port))
|
(define sock1 (make-client-socket "127.0.0.1" sock1-port))
|
||||||
|
|
||||||
|
|
@ -40,3 +41,4 @@
|
||||||
(write (utf8->string (socket-recv client-sock1 3)))
|
(write (utf8->string (socket-recv client-sock1 3)))
|
||||||
(newline)
|
(newline)
|
||||||
|
|
||||||
|
(test-end "srfi-106")
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue