#include #include #include #include #include #include #include inline int CheckErrOut( int retcode, const char *msg ) { if (retcode != -1) return 0; printf("%s: errno=%d - %s\n", msg, errno, strerror(errno)); exit(1); } int main(int argc, char *argv[]) { const char send_msg[] = "foo bar"; int ret = 0; int fd = -1; struct pollfd pfd; struct sockaddr_in from, to; int port = 0; if (argc > 1 && sscanf(argv[1], " %d", &port)==1) ; else port = 12345; fd = socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP); CheckErrOut(fd,"socket"); memset(&from,0,sizeof(from)); from.sin_family = AF_INET; from.sin_addr.s_addr = INADDR_ANY; from.sin_port = 0; ret = bind(fd,&from,sizeof(from)); CheckErrOut(ret,"bind"); memset(&to,0,sizeof(to)); to.sin_family = AF_INET; to.sin_addr.s_addr = htonl(INADDR_LOOPBACK); to.sin_port = htons(port); ret = sendto(fd,send_msg,sizeof(send_msg),0,&to,sizeof(to)); CheckErrOut(ret,"sendto"); memset(&pfd,0,sizeof(pfd)); pfd.fd = fd; pfd.events = POLLIN; ret = poll(&pfd,1,10000); CheckErrOut(ret,"poll"); if (ret != 0) { char recv_buf[100]; int addrlen; ret = recvfrom(fd,recv_buf,sizeof(recv_buf),0,&to,&addrlen); CheckErrOut(ret,"recvfrom"); printf("received: %u bytes\n", ret); } else printf("poll - timeout\n"); close(fd); return 0; }