WvStreams
wvudpex.cc
00001 /*
00002  * A WvUDP example.
00003  *
00004  * WvUDPStream example.  Waits for data on port 19.
00005  * Print something like:
00006  * udp<Info>: Local address is 0.0.0.0:33234 , and waits
00007  */
00008 
00009 #include "wvistreamlist.h"
00010 #include "wvlog.h"
00011 #include "wvudp.h"
00012 
00013 int main(int argc, char **argv)
00014 {
00015     WvLog err("udp", WvLog::Error);
00016     WvIPPortAddr nothing;
00017     WvIPPortAddr remaddr(argc > 1 ? argv[1] : "127.0.0.1:19");
00018     WvUDPStream sock(nothing, nothing);
00019 
00020     sock.enable_broadcasts();
00021 
00022     err(WvLog::Info, "Local address is %s.\n", *sock.local());
00023 
00024     wvcon->autoforward(sock);
00025     sock.autoforward(err);
00026 
00027     WvIStreamList l;
00028     l.add_after(l.tail, wvcon, false);
00029     l.add_after(l.tail, &sock, false);
00030 
00031     while (wvcon->isok() && sock.isok())
00032     {
00033         sock.setdest(remaddr);
00034         if (l.select(1000))
00035         {
00036             if (wvcon->select(0))
00037                 wvcon->callback();
00038             else if (sock.select(0))
00039             {
00040                 sock.callback();
00041                 err(WvLog::Info, "    (remote: %s)\n", *sock.src());
00042             }
00043         }
00044     }
00045 
00046     if (!wvcon->isok() && wvcon->geterr())
00047         err("stdin: %s\n", strerror(wvcon->geterr()));
00048     else if (!sock.isok() && sock.geterr())
00049         err("socket: %s\n", strerror(sock.geterr()));
00050 
00051     return 0;
00052 }