#include #include #include #include #include #include #include /* ./udp remote port local port interval */ int main(int ac, char ** av) { int port=8888; int port2=port; char * host; char * data="data"; int sk,rv; struct sockaddr_in addr; struct sockaddr_in laddr; int interval=0; if (ac < 2) { return 1; } if (ac >= 3) { port=atoi(av[2]); port2=port; } if (ac >= 4) { port2=atoi(av[3]); if (port2 == 0) { port2=port; } } if (ac >= 5) { interval=atoi(av[4]); } addr.sin_family=PF_INET; addr.sin_addr.s_addr=inet_addr(av[1]); addr.sin_port=htons(port); printf("Dst: %s:%d\n", inet_ntoa(addr.sin_addr), ntohs(addr.sin_port)); sk=socket(PF_INET, SOCK_DGRAM, 0); assert(sk >= 0); laddr.sin_family=PF_INET; laddr.sin_port=htons(port2); laddr.sin_addr.s_addr=inet_addr("0.0.0.0"); rv=bind(sk, (struct sockaddr *) &laddr, sizeof(struct sockaddr_in)); printf("bind: rv=%d errno=%d strerrno=%s\n", rv, errno, strerror(errno)); rv=sendto(sk, data, strlen(data)+1, 0, (struct sockaddr *) &addr, sizeof(struct sockaddr_in)); printf("sendto: rv=%d errno=%d strerrno=%s\n", rv, errno, strerror(errno)); if (interval > 0) { do { sleep(interval); rv=sendto(sk, data, strlen(data)+1, 0, (struct sockaddr *) &addr, sizeof(struct sockaddr_in)); printf("sendto: rv=%d errno=%d strerrno=%s\n", rv, errno, strerror(errno)); } while (1); } }