WvStreams
|
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 }