Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | added EINTR support on connect/inet and accept |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
c7ecd28930666b0b5c04d2b55873804c |
User & Date: | aldo 2016-12-12 15:32:59 |
Context
2016-12-12
| ||
16:01 | added better errno support check-in: e0957430e1 user: aldo tags: trunk | |
15:32 | added EINTR support on connect/inet and accept check-in: c7ecd28930 user: aldo tags: trunk | |
14:05 | ops missing ) on previous commit check-in: 8c6adf71a2 user: aldo tags: trunk | |
Changes
Changes to socket.sls.
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
...
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
|
(foreign-ref 'void* (ftype-ref hostent (h_addr_list) server) 0) (ftype-ref hostent (h_length) server)) (ftype-set! sockaddr_in (sin_port) addr (htons port)) (let ([r (connect* (port-file-descriptor socket) addr (ftype-sizeof sockaddr_in))]) (foreign-free (ftype-pointer-address addr)) (when (< r 0) (errorf 'connect/inet "failed: ~a" (strerror)))))) (define (bind/inet socket address port) (define SO_REUSEADDR 2) (define SOL_SOCKET 1) (define setsockopt* (foreign-procedure "setsockopt" (int int int u8* socklen_t) int)) (define bind* (foreign-procedure "bind" (int (* sockaddr_in) socklen_t) int)) (define opt (make-bytevector (ftype-sizeof int))) ................................................................................ (when (< r 0) (errorf 'listen "failed: ~a" (strerror))) r)) (define (accept s) (define accept* (foreign-procedure "accept" (int void* void*) int)) ;; TODO: get the client address! (let ([r (accept* (port-file-descriptor s) 0 0)]) (when (< r 0) (errorf 'accept "failed: ~a" (strerror))) (open-fd-input/output-port r))) ) #| ;Example: (load "socket.sls") |
>
|
>
>
|
>
>
|
>
|
|
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
...
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
|
(foreign-ref 'void* (ftype-ref hostent (h_addr_list) server) 0) (ftype-ref hostent (h_length) server)) (ftype-set! sockaddr_in (sin_port) addr (htons port)) (let ([r (connect* (port-file-descriptor socket) addr (ftype-sizeof sockaddr_in))]) (foreign-free (ftype-pointer-address addr)) (when (< r 0) (if (= (errno) EINTR) (connect/inet socket address port) (errorf 'connect/inet "failed: ~a" (strerror))))))) (define (bind/inet socket address port) (define SO_REUSEADDR 2) (define SOL_SOCKET 1) (define setsockopt* (foreign-procedure "setsockopt" (int int int u8* socklen_t) int)) (define bind* (foreign-procedure "bind" (int (* sockaddr_in) socklen_t) int)) (define opt (make-bytevector (ftype-sizeof int))) ................................................................................ (when (< r 0) (errorf 'listen "failed: ~a" (strerror))) r)) (define (accept s) (define accept* (foreign-procedure "accept" (int void* void*) int)) ;; TODO: get the client address! (let ([r (accept* (port-file-descriptor s) 0 0)]) (cond [(< r 0) (if (= (errno) EINTR) (accept s) (errorf 'accept "failed: ~a" (strerror)))] [else (open-fd-input/output-port r)]))) ) #| ;Example: (load "socket.sls") |