Added flag macros, header comment block

This commit is contained in:
Justin Ethier 2016-09-26 23:59:06 -04:00
parent fe70f7842d
commit 2205eedea9

View file

@ -1,4 +1,12 @@
;; Sockets library ;;;; Cyclone Scheme
;;;; https://github.com/justinethier/cyclone
;;;;
;;;; Copyright (c) 2014-2016, Justin Ethier
;;;; All rights reserved.
;;;;
;;;; This module implements the basic socket interface from SRFI 106:
;;;; http://srfi.schemers.org/srfi-106/srfi-106.html
;;;;
(define-library (106) ;(srfi 106) (define-library (106) ;(srfi 106)
(include-c-header "<sys/types.h>") (include-c-header "<sys/types.h>")
(include-c-header "<sys/socket.h>") (include-c-header "<sys/socket.h>")
@ -246,63 +254,67 @@
" close(obj_obj2int(sockfd)); " close(obj_obj2int(sockfd));
return_closcall1(data, k, boolean_t);") return_closcall1(data, k, boolean_t);")
;; TODO: socket-input-port ;; TODO: implement both of these:
;; TODO: socket-output-port (define (socket-input-port sock)
(error "Not implemented yet"))
(define (socket-output-port sock)
(error "Not implemented yet"))
;; END TODO
(define (call-with-socket socket proc) (define (call-with-socket socket proc)
(let ((result (proc socket))) (let ((result (proc socket)))
(socket-close socket) (socket-close socket)
result)) result))
; (define-syntax address-family (define-syntax flags:sym->const
; (er-macro-transformer (er-macro-transformer
; (lambda (expr rename compare) (lambda (expr rename compare)
; (case (cadr expr) `(define-syntax ,(cadr expr)
; ((inet) '*af-inet*) (er-macro-transformer
; ((inet6) '*af-inet6*) (lambda (expr rename compare)
; (else '*af-unspec*))))) (case (cadr expr)
,@(cddr expr)
(else
(error
"Unexpected value"
(list (quote ,(cadr expr)) (cadr expr)))))))))))
;; TODO: not supported yet? define-syntax is not recognized by eval (flags:sym->const
; (define-syntax flags:sym->const address-family
; (er-macro-transformer ((inet) '*af-inet*)
; (lambda (expr rename compare) ((inet6) '*af-inet6*)
; `(define-syntax ,(car expr) ((unspec) '*af-unspec*))
; (er-macro-transformer
; (lambda (expr rename compare) (flags:sym->const
; (case (cadr expr) address-info
; ,@(cdr expr)))))))) ((canoname) '*ai-canonname*)
; ((numerichost) '*ai-numerichost*)
; (flags:sym->const ((v4mapped) '*ai-v4mapped*)
; address-family ((all) '*ai-all*)
; ((inet) '*af-inet*) ((addrconfig) '*ai-addrconfig*))
; ((inet6) '*af-inet6*)
; (else '*af-unspec*)) (flags:sym->const
; socket-domain
;address-info ((stream) '*sock-stream*)
;((canoname) '*ai-canonname*) ((datagram) '*sock-dgram*))
;((numerichost) '*ai-numerichost*)
;((v4mapped) '*ai-v4mapped*) (flags:sym->const
;((all) '*ai-all*) ip-protocol
;((addrconfig) '*ai-addrconfig*) ((ip) '*ipproto-ip*)
; ((tcp) '*ipproto-tcp*)
;socket-domain ((udp) '*ipproto-udp*))
;((stream) '*sock-stream*)
;((datagram) '*sock-dgram*) (flags:sym->const
; message-type
;ip-protocol ((none) 0)
;((ip) '*ipproto-ip*) ((peek) '*msg-peek*)
;((tcp) '*ipproto-tcp*) ((oob) '*msg-oob*)
;((udp) '*ipproto-udp*) ((wait-all) '*msg-waitall*))
;
;message-type (flags:sym->const
;((none) 0) shutdown-method
;((peek) '*msg-peek*) ((read) '*shut-rd*)
;((oob) '*msg-oob*) ((write) '*shut-wr*))
;((wait-all) '*msg-waitall*)
;
;shutdown-method
;((read) '*shut-rd*)
;((write) '*shut-wr*)
(define (socket-merge-flags . flags) (define (socket-merge-flags . flags)
(if (null? flags) (if (null? flags)