]> git.tdb.fi Git - libs/net.git/blobdiff - examples/netcat.cpp
Add a dynamic receiver class for more flexible packet handling
[libs/net.git] / examples / netcat.cpp
index 2532959e56ec7e8b595c035d7334b14c797a8b95..cd549f4a045e9486f92d9c01da5fe04edda9c16a 100644 (file)
@@ -3,7 +3,7 @@
 #include <msp/core/refptr.h>
 #include <msp/io/console.h>
 #include <msp/io/eventdispatcher.h>
-#include <msp/net/streamlistensocket.h>
+#include <msp/net/streamserversocket.h>
 #include <msp/net/streamsocket.h>
 #include <msp/net/resolve.h>
 
@@ -15,7 +15,7 @@ class NetCat: public RegisteredApplication<NetCat>
 private:
        bool ipv6;
        bool listen;
-       Net::StreamListenSocket *server_sock;
+       Net::StreamServerSocket *server_sock;
        Net::StreamSocket *sock;
        IO::EventDispatcher event_disp;
 
@@ -34,16 +34,15 @@ NetCat::NetCat(int argc, char **argv):
        server_sock(0),
        sock(0)
 {
+       string host_name;
+
        GetOpt getopt;
        getopt.add_option('6', "ipv6",   ipv6,   GetOpt::NO_ARG);
        getopt.add_option('l', "listen", listen, GetOpt::NO_ARG);
+       getopt.add_argument("host", host_name, GetOpt::REQUIRED_ARG);
        getopt(argc, argv);
 
-       const vector<string> &args = getopt.get_args();
-       if(args.empty())
-               throw usage_error("host argument missing");
-
-       RefPtr<Net::SockAddr> addr = Net::resolve(args.front(), (ipv6 ? Net::INET6 : Net::INET));
+       RefPtr<Net::SockAddr> addr = Net::resolve(host_name, (ipv6 ? Net::INET6 : Net::INET));
        if(!listen)
        {
                sock = new Net::StreamSocket(addr->get_family());
@@ -53,7 +52,7 @@ NetCat::NetCat(int argc, char **argv):
        }
        else
        {
-               server_sock = new Net::StreamListenSocket(addr->get_family());
+               server_sock = new Net::StreamServerSocket(addr->get_family());
                server_sock->listen(*addr);
                event_disp.add(*server_sock);
                server_sock->signal_data_available.connect(sigc::mem_fun(this, &NetCat::net_data_available));