2009-07-22 14 views
6

j'ai commencé un serveur Compojure (jetée) avec:Comment puis-je faire Compojure écouter une seule adresse IP

(defonce *server* (run-server {:host "localhost" :port 8080} "/*" (servlet routes))) 

mais netstat montre encore qu'il est à l'écoute sur 0.0.0.0:8080, à savoir toutes les adresses IP.

Quel est le paramètre correct à transmettre à run-server pour le faire écouter sur une seule adresse IP?

Répondre

7

Je pense que vous allez devoir réparer Compojure. Il ne fait rien avec votre paramètre :host. Faire ce changement à server/jetty.clj semble fonctionner, mais je ne l'ai pas testé à fond.

(defn- create-server 
    "Construct a Jetty Server instance." 
    [options servlets] 
    (let [port  (options :port 80) 
     host  (options :host "0.0.0.0") 
     connector (doto (org.mortbay.jetty.bio.SocketConnector.) 
        (.setPort port) 
        (.setHost host)) 
     server (doto (Server.) 
        (.addConnector connector)) 
     servlets (partition 2 servlets)] 
    (when (or (options :ssl) (options :ssl-port)) 
     (add-ssl-connector! server options)) 
    (doseq [[url-or-path servlet] servlets] 
     (add-servlet! server url-or-path servlet)) 
    server))
user> (run-server {:port 12346}) 
2009-07-22 13:48:53.999::INFO: jetty-6.1.15 
2009-07-22 13:48:54.002::INFO: Started [email protected]:12346 
nil 
user> (run-server {:host "127.0.0.1" :port 12345}) 
2009-07-22 13:48:08.061::INFO: jetty-6.1.15 
2009-07-22 13:48:08.129::INFO: Started [email protected]:12345 
+3

Cela a été roulé dans compojure, de sorte que ça fonctionne - yay open source! – l0st3d