mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-24 20:45:06 +02:00
Added flag macros, header comment block
This commit is contained in:
parent
fe70f7842d
commit
2205eedea9
1 changed files with 63 additions and 51 deletions
114
srfi/106.sld
114
srfi/106.sld
|
@ -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)
|
||||||
|
|
Loading…
Add table
Reference in a new issue