00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "wvstreamlist.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 WvStreamList 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 }