]> git.tdb.fi Git - libs/net.git/blobdiff - source/server.cpp
Change listen address construction
[libs/net.git] / source / server.cpp
index 45bf69b285bef06da567dc599160bdd44f30dc36..9205cc1096383caa797f1af237ec9e02e1b07724 100644 (file)
@@ -1,7 +1,9 @@
 #include <exception>
 #include <msp/core/refptr.h>
 #include <msp/net/inet.h>
+#include <msp/net/resolve.h>
 #include <msp/net/streamsocket.h>
+#include <msp/strings/format.h>
 #include "request.h"
 #include "response.h"
 #include "server.h"
@@ -16,7 +18,8 @@ Server::Server(unsigned port):
        event_disp(0)
 {
        sock.signal_data_available.connect(sigc::mem_fun(this, &Server::data_available));
-       sock.listen(Net::InetAddr(0, port), 8);
+       RefPtr<Net::SockAddr> addr = Net::resolve("*", format("%d", port));
+       sock.listen(*addr, 8);
 }
 
 unsigned Server::get_port() const
@@ -55,7 +58,6 @@ void Server::submit_response(Response &resp)
        if(cl.async)
        {
                cl.sock->write(resp.str());
-               cl.sock->close();
                cl.stale = true;
        }
 }
@@ -99,7 +101,7 @@ void Server::client_data_available(Client &cl)
                                if(cl.request->get_method()!="GET" && cl.request->get_method()!="POST")
                                {
                                        response = new Response(NOT_IMPLEMENTED);
-                                       response->add_content("Method not implemented");
+                                       response->add_content("Method not implemented\n");
                                }
                        }
                        catch(const exception &e)
@@ -131,7 +133,7 @@ void Server::client_data_available(Client &cl)
                                if(response->get_status()==NONE)
                                {
                                        response = new Response(NOT_FOUND);
-                                       response->add_content("The requested resource was not found");
+                                       response->add_content("The requested resource was not found\n");
                                }
                        }
                }
@@ -146,7 +148,6 @@ void Server::client_data_available(Client &cl)
        if(response)
        {
                cl.sock->write(response->str());
-               cl.sock->close();
                cl.stale = true;
        }
 }
@@ -162,7 +163,8 @@ Server::Client &Server::get_client_by_response(Response &resp)
                if(i->response==&resp)
                        return *i;
 
-       throw InvalidParameterValue("Response does not belong to any client");
+       // XXX Do this differently
+       throw invalid_argument("Response does not belong to any client");
 }