Check-in [15fd017f95]
Not logged in

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:bind/inet now sets SO_REUSEADDR
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 15fd017f959a14a9a9a15f17a7c3996aed979f14
User & Date: aldo 2016-12-11 13:55:32
Context
2016-12-11
13:57
added missing license headers check-in: 03e5fe6318 user: aldo tags: trunk
13:55
bind/inet now sets SO_REUSEADDR check-in: 15fd017f95 user: aldo tags: trunk
13:55
new posix funcs. dup fork, improved wait-for-pid check-in: 00d9573880 user: aldo tags: trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to socket.sls.

111
112
113
114
115
116
117



118



119
120
121
122
123
124
125
      (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 bind* (foreign-procedure "bind" (int (* sockaddr_in) socklen_t) int))



    (let ([addr (make-ftype-pointer sockaddr_in
				    (foreign-alloc (ftype-sizeof sockaddr_in)))])
      (memset (ftype-pointer-address addr) 0 (ftype-sizeof sockaddr_in))
      (ftype-set! sockaddr_in (sin_family) addr (socket-domain 'inet))
      (case address
	[any
	 (ftype-set! in_addr (s_addr) (ftype-&ref sockaddr_in (sin_addr) addr) INADDR_ANY)]







>
>
>

>
>
>







111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
      (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)))
    (bytevector-sint-set! opt 0 1 (native-endianness) (ftype-sizeof int))
    (setsockopt* (port-file-descriptor socket) SOL_SOCKET SO_REUSEADDR opt (ftype-sizeof int))
    (let ([addr (make-ftype-pointer sockaddr_in
				    (foreign-alloc (ftype-sizeof sockaddr_in)))])
      (memset (ftype-pointer-address addr) 0 (ftype-sizeof sockaddr_in))
      (ftype-set! sockaddr_in (sin_family) addr (socket-domain 'inet))
      (case address
	[any
	 (ftype-set! in_addr (s_addr) (ftype-&ref sockaddr_in (sin_addr) addr) INADDR_ANY)]