On Sun, 12 Dec 2004, Adam Warner wrote:

> This binds to all network interfaces:
> (ext:create-inet-listener 9990)
> 
> netstat -a | grep 9990
> tcp        0      0 *:9990                  *:*                     LISTEN
> 
> The listener can be supplied with a host keyword. This doesn't appear to
> work for localhost or 127.0.0.1:

This is a bug in CMUCL: what's missing is a conversion to network byte 
order. Quick & dirty:

* (in-package :ext)

* (with-alien ((s inet-sockaddr)) (setf (slot s 'family) af-inet) (setf 
(slot s 'port) 2001) (setf (slot s 'addr) (host-entry-addr 
(lookup-host-entry "1.0.0.127"))) (setf so (create-inet-socket :stream)) 
(unix:unix-bind so (alien-sap s) (alien-size inet-sockaddr :bytes)))
; 

; Warning: This variable is undefined:
;   SO
; 
0
* (with-alien ((s inet-sockaddr)) (setf (slot s 'family) af-inet) (setf 
(slot s 'port) 2001) (setf (slot s 'addr) (host-entry-addr 
(lookup-host-entry "1.0.0.127"))) (setf so (create-inet-socket :stream)) 
(unix:unix-bind so (alien-sap s) (alien-size inet-sockaddr :bytes)))
; 

; Warning: This variable is undefined:
;   SO
; 
-1


Indeed:

[EMAIL PROTECTED]:~$ strace -p 3217
Process 3217 attached - interrupt to quit
select(1, [0], [], NULL, {0, 280000})   = 0 (Timeout)
select(1, [0], [], NULL, {1, 0})        = 0 (Timeout)
socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 14
gettimeofday({1102816737, 33668}, {4294967236, 0}) = 0
gettimeofday({1102816737, 34630}, {4294967236, 0}) = 0
bind(14, {sa_family=AF_INET, sin_port=htons(53511), 
sin_addr=inet_addr("1.0.0.127")}, 16) = -1 EADDRNOTAVAIL (Cannot assign 
requested address)
write(2, "; ", 2)                       = 2
write(1, "\n", 1)                       = 1

-- 
regards,               [EMAIL PROTECTED]              (o_
 Thomas Fischbacher -  http://www.cip.physik.uni-muenchen.de/~tf  //\
(lambda (n) ((lambda (p q r) (p p q r)) (lambda (g x y)           V_/_
(if (= x 0) y (g g (- x 1) (* x y)))) n 1))                  (Debian GNU)


Reply via email to