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)