Re: A Issue in HTTP::%LOCAL-HOST-PARSED-IP-NUMBER when start CL-HTTP on specific x.x.x.x address and port
Martin Simmons <[email protected]> Wed, 23 Mar 2011 12:39:48 GMT
| Newsgroups | gmane.lisp.cl-http |
|---|---|
| Message-ID | <[email protected]> |
>>>>> On Wed, 23 Mar 2011 16:10:07 +0800, Chun Tian (binghe) said: > > Hi, CL-HTTP developers > > I'm trying to start a CL-HTTP server on specific x.x.x.x IPv4 address and port. I have to do this, because: > > 1) I don't have a resolvable hostname on my laptop and some other servers; > 2) I have many interface addresses on single machine, need to choose a specific one to be the default virtual host. > > Currently I have following initialize code when a empty CL-HTTP image without examples start up: > > (defun warm-start () > (let ((host (get-from-command-line "-host")) > (port (or (parse-integer (get-from-command-line "-port")) #+linux 443 #-linux 80))) > > #+linux > (http:define-https-service > :address host > :port port > :certificate #p"SYS:SSL;SERVER.CRT" > :private-key #p"SYS:SSL;SERVER.KEY" > :password :none > :certificate-authorities #p"SYS:SSL;CA.CRT" > :parameters #p"SYS:SSL;DH" > :ciphers :all > :ssl-version :ssl-default) > > (setq www-utils:*primary-network-host* host > http:*standard-http-port* port > http:*standard-protocol* #+linux :https #-linux :http > http:*resolve-ip-addresses* nil > http:*connection-backlog* 128. > http::*standard-log-directory* #p"SYS:LOG;") > > (http:set-maximum-number-of-connections 32.) > (http:log-file-stream-stays-open t) > > (http:run-server-initializations t) > ;; (http::run-server-launch-initializations t) > (http:enable-http-service))) > > Please let me know if my way to start CL-HTTP has something wrong. > > And my problem is, when www-utils:*primary-network-host* was set to a string like "192.168.150.12", (WWW-UTILS:LOCAL-HOST) cannot work, because www-utils:%local-host-parsed-ip-number will call IPC:INTERNET-ADDRESS on *primary-network-host*, and due to its definition, only hostname can be accepted: > > (defun local-machine-instance () > "Returns the primary domain name (or IP number) for the local host." > (or *primary-network-host* (machine-instance))) > > (defun %local-host-parsed-ip-number () > (ipc:internet-address (local-machine-instance))) > > ;; LispWorks version > (defun internet-address (name) > (or (comm:get-host-entry name :fields '(:address)) > (error 'www-utils:unknown-host-name :hostname name))) > > To make things work, I have to change the definition of %local-host-parsed-ip-number into this: > > (in-package :www-utils) > > (defun %local-host-parsed-ip-number () > (or (ipc:string-ip-address (local-machine-instance)) > (ipc:internet-address (local-machine-instance)))) > > Is this reasonable, or is there any other solution? It looks reasonable to me (the function %parse-internet-address does something similar). I would bind the result of calling (local-machine-instance) in a variable. I am slightly puzzled why you get an error though, because (comm:get-host-entry "192.168.150.12" :fields '(:address)) returns the correct number for me, even though 192.168.150.12 is not resolvable in the DNS. -- Martin Simmons LispWorks Ltd http://www.lispworks.com/ _______________________________________________ WWW-CL mailing list [email protected] https://lists.csail.mit.edu/mailman/listinfo/www-cl