~ chicken-core (chicken-5) 76b871f13a6e63165c508b91fc0c2dc5f1ea801a
commit 76b871f13a6e63165c508b91fc0c2dc5f1ea801a Author: Evan Hanson <evhan@foldling.org> AuthorDate: Sat May 13 19:55:47 2017 +1200 Commit: Peter Bex <peter@more-magic.net> CommitDate: Fri May 19 16:23:25 2017 +0200 Drop "##net#" qualifiers in tcp module Signed-off-by: Peter Bex <peter@more-magic.net> diff --git a/tcp.scm b/tcp.scm index 8e3d0e4c..a806ac99 100644 --- a/tcp.scm +++ b/tcp.scm @@ -165,30 +165,28 @@ EOF (define-foreign-variable _invalid_socket int "INVALID_SOCKET") (define-foreign-variable _socket_error int "SOCKET_ERROR") -(define ##net#last-error-code (foreign-lambda int "get_last_socket_error")) -(define ##net#error-code->message - (foreign-lambda c-string "errormsg_from_code" int)) -(define ##net#retry? (foreign-lambda bool "should_retry_call")) -(define ##net#in-progress? (foreign-lambda bool "call_in_progress")) -(define ##net#interrupted? (foreign-lambda bool "call_was_interrupted")) -(define ##net#socket (foreign-lambda int "socket" int int int)) -(define ##net#bind (foreign-lambda int "bind" int scheme-pointer int)) -(define ##net#listen (foreign-lambda int "listen" int int)) -(define ##net#accept (foreign-lambda int "accept" int c-pointer c-pointer)) -(define ##net#close (foreign-lambda int "closesocket" int)) -(define ##net#recv (foreign-lambda int "recv" int scheme-pointer int int)) -(define ##net#shutdown (foreign-lambda int "shutdown" int int)) -(define ##net#connect (foreign-lambda int "connect" int scheme-pointer int)) -(define ##net#check-fd-ready (foreign-lambda int "C_check_fd_ready" int)) -(define ##net#set-socket-options (foreign-lambda int "C_set_socket_options" int)) - - -(define ##net#send +(define last-error-code (foreign-lambda int "get_last_socket_error")) +(define error-code->message (foreign-lambda c-string "errormsg_from_code" int)) +(define retry? (foreign-lambda bool "should_retry_call")) +(define in-progress? (foreign-lambda bool "call_in_progress")) +(define interrupted? (foreign-lambda bool "call_was_interrupted")) +(define socket (foreign-lambda int "socket" int int int)) +(define bind (foreign-lambda int "bind" int scheme-pointer int)) +(define listen (foreign-lambda int "listen" int int)) +(define accept (foreign-lambda int "accept" int c-pointer c-pointer)) +(define close (foreign-lambda int "closesocket" int)) +(define recv (foreign-lambda int "recv" int scheme-pointer int int)) +(define shutdown (foreign-lambda int "shutdown" int int)) +(define connect (foreign-lambda int "connect" int scheme-pointer int)) +(define check-fd-ready (foreign-lambda int "C_check_fd_ready" int)) +(define set-socket-options (foreign-lambda int "C_set_socket_options" int)) + +(define send (foreign-lambda* int ((int s) (scheme-pointer msg) (int offset) (int len) (int flags)) "C_return(send(s, (char *)msg+offset, len, flags));")) -(define ##net#getsockname +(define getsockname (foreign-lambda* c-string ((int s)) "struct sockaddr_in sa;" "unsigned char *ptr;" @@ -198,21 +196,21 @@ EOF "C_snprintf(addr_buffer, sizeof(addr_buffer), \"%d.%d.%d.%d\", ptr[ 0 ], ptr[ 1 ], ptr[ 2 ], ptr[ 3 ]);" "C_return(addr_buffer);") ) -(define ##net#getsockport +(define getsockport (foreign-lambda* int ((int s)) "struct sockaddr_in sa;" "int len = sizeof(struct sockaddr_in);" "if(getsockname(s, (struct sockaddr *)&sa, (socklen_t *)(&len)) != 0) C_return(-1);" "else C_return(ntohs(sa.sin_port));") ) -(define ##net#getpeerport +(define getpeerport (foreign-lambda* int ((int s)) "struct sockaddr_in sa;" "int len = sizeof(struct sockaddr_in);" "if(getpeername(s, (struct sockaddr *)&sa, (socklen_t *)(&len)) != 0) C_return(-1);" "else C_return(ntohs(sa.sin_port));") ) -(define ##net#getpeername +(define getpeername (foreign-lambda* c-string ((int s)) "struct sockaddr_in sa;" "unsigned char *ptr;" @@ -222,7 +220,7 @@ EOF "C_snprintf(addr_buffer, sizeof(addr_buffer), \"%d.%d.%d.%d\", ptr[ 0 ], ptr[ 1 ], ptr[ 2 ], ptr[ 3 ]);" "C_return(addr_buffer);") ) -(define ##net#startup +(define startup (foreign-lambda* bool () #<<EOF #ifdef _WIN32 C_return(WSAStartup(MAKEWORD(1, 1), &wsa) == 0); @@ -233,16 +231,16 @@ EOF EOF ) ) -(unless (##net#startup) +(unless (startup) (##sys#signal-hook #:network-error "cannot initialize Winsock") ) -(define ##net#getservbyname +(define getservbyname (foreign-lambda* int ((c-string serv) (c-string proto)) "struct servent *se; if((se = getservbyname(serv, proto)) == NULL) C_return(0); else C_return(ntohs(se->s_port));") ) -(define ##net#gethostaddr +(define gethostaddr (foreign-lambda* bool ((scheme-pointer saddr) (c-string host) (unsigned-short port)) "struct hostent *he = gethostbyname(host);" "struct sockaddr_in *addr = (struct sockaddr_in *)saddr;" @@ -256,13 +254,13 @@ EOF (define-syntax network-error (syntax-rules () ((_ loc msg . args) - (network-error/code loc (##net#last-error-code) msg . args)))) + (network-error/code loc (last-error-code) msg . args)))) (define-syntax network-error/close (syntax-rules () ((_ loc msg socket . args) - (let ((error-code (##net#last-error-code))) - (##net#close socket) + (let ((error-code (last-error-code))) + (close socket) (network-error/code loc error-code msg socket . args))))) (define-syntax network-error/code @@ -270,10 +268,10 @@ EOF ((_ loc error-code msg . args) (##sys#signal-hook #:network-error loc (string-append (string-append msg " - ") - (##net#error-code->message error-code)) + (error-code->message error-code)) . args)))) -(define ##net#parse-host +(define parse-host (let ((substring substring)) (lambda (host proto) (let ((len (##sys#size host))) @@ -285,13 +283,13 @@ EOF (values (substring host (fx+ i 1) len) (let* ((s (substring host 0 i)) - (p (##net#getservbyname s proto)) ) + (p (getservbyname s proto))) (when (eq? 0 p) (network-error 'tcp-connect "cannot compute port from service" s) ) p) ) (loop (fx+ i 1)) ) ) ) ) ) ) ) ) -(define ##net#fresh-addr +(define fresh-addr (foreign-lambda* void ((scheme-pointer saddr) (unsigned-short port)) "struct sockaddr_in *addr = (struct sockaddr_in *)saddr;" "memset(addr, 0, sizeof(struct sockaddr_in));" @@ -299,21 +297,21 @@ EOF "addr->sin_port = htons(port);" "addr->sin_addr.s_addr = htonl(INADDR_ANY);") ) -(define (##net#bind-socket style host port) +(define (bind-socket style host port) (let ((addr (make-string _sockaddr_in_size))) (if host - (unless (##net#gethostaddr addr host port) + (unless (gethostaddr addr host port) (##sys#signal-hook #:network-error 'tcp-listen "getting listener host IP failed" host port) ) - (##net#fresh-addr addr port) ) - (let ((s (##net#socket _af_inet style 0))) + (fresh-addr addr port) ) + (let ((s (socket _af_inet style 0))) (when (eq? _invalid_socket s) (##sys#error "cannot create socket") ) ;; PLT makes this an optional arg to tcp-listen. Should we as well? - (when (eq? _socket_error (##net#set-socket-options s)) + (when (eq? _socket_error (set-socket-options s)) (network-error 'tcp-listen "error while setting up socket" s) ) - (when (eq? _socket_error (##net#bind s addr _sockaddr_in_size)) + (when (eq? _socket_error (bind s addr _sockaddr_in_size)) (network-error/close 'tcp-listen "cannot bind to socket" s host port) ) s)) ) @@ -324,8 +322,8 @@ EOF (when (or (fx< port 0) (fx> port 65535)) (##sys#signal-hook #:domain-error 'tcp-listen "invalid port number" port) ) (##sys#check-fixnum backlog) - (let ((s (##net#bind-socket _sock_stream host port))) - (when (eq? _socket_error (##net#listen s backlog)) + (let ((s (bind-socket _sock_stream host port))) + (when (eq? _socket_error (listen s backlog)) (network-error/close 'tcp-listen "cannot listen on socket" s port) ) (##sys#make-structure 'tcp-listener s) ) ) @@ -336,7 +334,7 @@ EOF (define (tcp-close tcpl) (##sys#check-structure tcpl 'tcp-listener) (let ((s (##sys#slot tcpl 1))) - (when (eq? _socket_error (##net#close s)) + (when (eq? _socket_error (close s)) (network-error 'tcp-close "cannot close TCP socket" tcpl) ) ) ) (define-constant +input-buffer-size+ 1024) @@ -358,7 +356,7 @@ EOF (set! tcp-connect-timeout (make-parameter #f (check 'tcp-connect-timeout))) (set! tcp-accept-timeout (make-parameter #f (check 'tcp-accept-timeout))) ) -(define ##net#io-ports +(define io-ports (let ((tbs tcp-buffer-size)) (lambda (loc fd) (unless (##core#inline "make_socket_nonblocking" fd) @@ -376,9 +374,9 @@ EOF (let* ((tmr (tcp-read-timeout)) (dlr (and tmr (+ (current-milliseconds) tmr)))) (let loop () - (let ((n (##net#recv fd buf +input-buffer-size+ 0))) + (let ((n (recv fd buf +input-buffer-size+ 0))) (cond ((eq? _socket_error n) - (cond ((##net#retry?) + (cond ((retry?) (when dlr (##sys#thread-block-for-timeout! ##sys#current-thread dlr) ) @@ -389,7 +387,7 @@ EOF #:network-timeout-error "read operation timed out" tmr fd) ) (loop) ) - ((##net#interrupted?) + ((interrupted?) (##sys#dispatch-interrupt loop)) (else (network-error #f "cannot read from socket" fd) ) ) ) @@ -411,15 +409,15 @@ EOF (or (fx< bufindex buflen) ;; XXX: This "knows" that check_fd_ready is ;; implemented using a winsock2 call on Windows - (let ((f (##net#check-fd-ready fd))) + (let ((f (check-fd-ready fd))) (when (eq? _socket_error f) (network-error #f "cannot check socket for input" fd) ) (eq? f 1) ) ) ) (lambda () (unless iclosed (set! iclosed #t) - (unless (##sys#slot data 1) (##net#shutdown fd _shut_rd)) - (when (and oclosed (eq? _socket_error (##net#close fd))) + (unless (##sys#slot data 1) (shutdown fd _shut_rd)) + (when (and oclosed (eq? _socket_error (close fd))) (network-error #f "cannot close socket input port" fd) ) ) ) (lambda () (when (fx>= bufindex buflen) @@ -486,9 +484,9 @@ EOF (offset 0) (dlw (and tmw (+ (current-milliseconds) tmw)))) (let* ((count (fxmin +output-chunk-size+ len)) - (n (##net#send fd s offset count 0)) ) + (n (send fd s offset count 0))) (cond ((eq? _socket_error n) - (cond ((##net#retry?) + (cond ((retry?) (when dlw (##sys#thread-block-for-timeout! ##sys#current-thread dlw) ) @@ -499,7 +497,7 @@ EOF #:network-timeout-error "write operation timed out" tmw fd) ) (loop len offset dlw) ) - ((##net#interrupted?) + ((interrupted?) (##sys#dispatch-interrupt (cut loop len offset dlw))) (else @@ -527,8 +525,8 @@ EOF (when (and outbuf (fx> (##sys#size outbuf) 0)) (output outbuf) (set! outbuf "") ) - (unless (##sys#slot data 2) (##net#shutdown fd _shut_wr)) - (when (and iclosed (eq? _socket_error (##net#close fd))) + (unless (##sys#slot data 2) (shutdown fd _shut_wr)) + (when (and iclosed (eq? _socket_error (close fd))) (network-error #f "cannot close socket output port" fd) ) ) ) (and outbuf (lambda () @@ -558,10 +556,10 @@ EOF #:network-timeout-error 'tcp-accept "accept operation timed out" tma fd) ) - (let ((fd (##net#accept fd #f #f))) + (let ((fd (accept fd #f #f))) (cond ((not (eq? _invalid_socket fd)) - (##net#io-ports 'tcp-accept fd)) - ((##net#interrupted?) + (io-ports 'tcp-accept fd)) + ((interrupted?) (##sys#dispatch-interrupt loop)) (else (network-error 'tcp-accept "could not accept from listener" tcpl)))) ) ) ) @@ -569,7 +567,7 @@ EOF (define (tcp-accept-ready? tcpl) (##sys#check-structure tcpl 'tcp-listener 'tcp-accept-ready?) ;; XXX: This "knows" that check_fd_ready is implemented using a winsock2 call - (let ((f (##net#check-fd-ready (##sys#slot tcpl 1)))) + (let ((f (check-fd-ready (##sys#slot tcpl 1)))) (when (eq? _socket_error f) (network-error 'tcp-accept-ready? "cannot check socket for input" tcpl) ) (eq? 1 f) ) ) @@ -589,26 +587,26 @@ EOF (addr (make-string _sockaddr_in_size))) (##sys#check-string host) (unless port - (set!-values (host port) (##net#parse-host host "tcp")) + (set!-values (host port) (parse-host host "tcp")) (unless port (##sys#signal-hook #:domain-error 'tcp-connect "no port specified" host)) ) (##sys#check-fixnum port) - (unless (##net#gethostaddr addr host port) + (unless (gethostaddr addr host port) (##sys#signal-hook #:network-error 'tcp-connect "cannot find host address" host) ) - (let ((s (##net#socket _af_inet _sock_stream 0)) ) + (let ((s (socket _af_inet _sock_stream 0))) (when (eq? _invalid_socket s) (network-error 'tcp-connect "cannot create socket" host port) ) - (when (eq? _socket_error (##net#set-socket-options s)) + (when (eq? _socket_error (set-socket-options s)) (network-error/close 'tcp-connect "error while setting up socket" s) ) (unless (##core#inline "make_socket_nonblocking" s) (network-error/close 'tcp-connect "fcntl() failed" s) ) (let loop () - (when (eq? _socket_error (##net#connect s addr _sockaddr_in_size)) - (cond ((##net#in-progress?) ; Wait till it's available via select/poll + (when (eq? _socket_error (connect s addr _sockaddr_in_size)) + (cond ((in-progress?) ; Wait till it's available via select/poll (when dlc (##sys#thread-block-for-timeout! ##sys#current-thread dlc)) (##sys#thread-block-for-i/o! ##sys#current-thread s #:output) (##sys#thread-yield!)) ; Don't loop: it's connected now - ((##net#interrupted?) + ((interrupted?) (##sys#dispatch-interrupt loop)) (else (network-error/close @@ -617,30 +615,30 @@ EOF (cond ((eq? _socket_error err) (network-error/close 'tcp-connect "getsockopt() failed" s)) ((fx> err 0) - (##net#close s) + (close s) (network-error/code 'tcp-connect err "cannot create socket")))) - (##net#io-ports 'tcp-connect s) ) ) ) + (io-ports 'tcp-connect s))) ) -(define (##sys#tcp-port->fileno p) +(define (tcp-port->fileno p loc) (let ((data (##sys#port-data p))) (if (vector? data) ; a meagre test, but better than nothing (##sys#slot data 0) - (error '##sys#tcp-port->fileno "argument does not appear to be a TCP port" p)))) + (error loc "argument does not appear to be a TCP port" p)))) (define (tcp-addresses p) (##sys#check-open-port p 'tcp-addresses) - (let ((fd (##sys#tcp-port->fileno p))) + (let ((fd (tcp-port->fileno p 'tcp-addresses))) (values - (or (##net#getsockname fd) + (or (getsockname fd) (network-error 'tcp-addresses "cannot compute local address" p) ) - (or (##net#getpeername fd) + (or (getpeername fd) (network-error 'tcp-addresses "cannot compute remote address" p) ) ) ) ) (define (tcp-port-numbers p) (##sys#check-open-port p 'tcp-port-numbers) - (let ((fd (##sys#tcp-port->fileno p))) - (let ((sp (##net#getsockport fd)) - (pp (##net#getpeerport fd))) + (let ((fd (tcp-port->fileno p 'tcp-port-numbers))) + (let ((sp (getsockport fd)) + (pp (getpeerport fd))) (when (eq? -1 sp) (network-error 'tcp-port-numbers "cannot compute local port" p) ) (when (eq? -1 pp) @@ -650,7 +648,7 @@ EOF (define (tcp-listener-port tcpl) (##sys#check-structure tcpl 'tcp-listener 'tcp-listener-port) (let* ((fd (##sys#slot tcpl 1)) - (port (##net#getsockport fd)) ) + (port (getsockport fd))) (when (eq? -1 port) (network-error 'tcp-listener-port "cannot obtain listener port" tcpl fd) ) port) )Trap