/* $Id: GSudpUtil_r.c,v 1.3 2008/04/11 17:44:27 tl Exp $ */ /* udp sender and receiver package */ #include #include #include #include #include #include #include #include /* globals */ int s_sock; int r_sock; struct sockaddr_in SocketAddr; struct sockaddr_in name; struct sockaddr_in sinadr; #define MAXBUF 1024 /*-----------------------------------------------------------*/ int SetupUdpReceiver(int port) { /* declarations */ #ifdef MAC int length; #else socklen_t length; #endif printf("this version will use Internet Protocol Version 4 (IPv4)\n"); /* Create socket from which to read. */ r_sock = socket(AF_INET, SOCK_DGRAM, 0); if (r_sock == -1) { perror("opening datagram socket"); exit(1); }; /* Create name with wildcards. */ bzero(&name, sizeof(name)); bzero(&sinadr, sizeof(sinadr)); name.sin_family = AF_INET; /* name.sin_addr.s6_addr = inaddr_any; */ name.sin_port = htons(port); if (bind(r_sock, (struct sockaddr *) & name, sizeof name) == -1) { perror("binding datagram socket"); exit(1); }; /* Find assigned port value and print it out. */ length = sizeof(name); if (getsockname(r_sock, (struct sockaddr *) & name, &length) == -1) { perror("getting socket name"); exit(1); }; printf("Socket port #%d\n", ntohs(name.sin_port)); /* done */ return (0); } /*-----------------------------------------------------------*/ int UdpReceiveBuf(char *buf, size_t * nbread, int maxlen) /* buf : buffer to receive data */ /* nbread : bytes/chars received */ /* maxlen : maximum bytes/chars to receive */ { /* delarations */ /* Read from the socket. */ *nbread = read(r_sock, buf, maxlen); if ((int) *nbread == -1) perror("error receiving datagram packet"); /* done */ return (0); } /*-----------------------------------------------------------*/ int CloseUdpReceiver() { /* delarations */ /* close socket */ close(r_sock); /* done */ printf("CloseUdpReceiver: socket closed\n"); return (0); }