/usr/share/scheme48-1.9/net/big-socket.scm is in scheme48 1.9-5.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | ; Part of Scheme 48 1.9. See file COPYING for notices and license.
; Authors: Mike Sperber
; Emulation of old socket interface.
; Server interface
; (open-socket [socket-number]) -> socket
; (close-socket socket)
; (socket-accept socket) -> [input-port output-port]
; (get-host-name) -> string
; (socket-port-number socket) -> integer
; Client interface
; (socket-client host-name socket-number) -> [input-port output-port]
(define open-socket
(opt-lambda ((port 0))
(let ((sock (make-socket (address-family inet) (socket-type stream))))
(set-socket-reuse-address?! sock #t)
(bind-socket sock (make-ipv4-socket-address (ipv4-address-any) port))
(socket-listen sock)
sock)))
(define (socket-port-number sock)
(socket-address-ipv4-port (socket-address sock)))
(define (socket-client host-name port)
(let* ((ai
(car
(get-address-info host-name #f
(address-info-flags) (address-family inet)
(socket-type stream))))
(sa (address-info-socket-address ai))
(address (socket-address-ipv4-address sa))
(socket (make-socket (address-family inet)
(socket-type stream))))
(socket-connect socket
(make-ipv4-socket-address address port))
(values (socket-input-port socket)
(socket-output-port socket))))
(define (socket-accept socket)
(call-with-values
(lambda () (net:socket-accept socket))
(lambda (newsock address)
(values (socket-input-port newsock)
(socket-output-port newsock)))))
; UDP sockets
; Open a UDP socket, returning the two sides. If a socket port is specified
; it is given to the input half.
(define open-udp-socket
(opt-lambda ((port 0))
(let ((sock (make-socket (address-family inet) (socket-type dgram))))
(set-socket-reuse-address?! sock #t)
(bind-socket sock (make-ipv4-socket-address (ipv4-address-any) port))
(values sock (dup-socket sock)))))
(define (udp-send socket address buffer count)
(socket-send socket buffer 0 count address))
(define (udp-receive socket buffer)
(socket-receive socket buffer))
(define udp-address? ipv4-socket-address?)
(define udp-address-address socket-address-ipv4-address)
(define udp-address-port socket-address-ipv4-port)
;; The old code would cache these addresses.
(define (lookup-udp-address host-name port)
(let* ((sa
(address-info-socket-address
(car
(get-address-info host-name #f
(address-info-flags) (address-family inet)
(socket-type dgram)))))
(inet (socket-address-ipv4-address sa)))
(make-ipv4-socket-address inet port)))
|