1*62782Sbostic .\" Copyright (c) 1986, 1993 2*62782Sbostic .\" The Regents of the University of California. All rights reserved. 327700Smckusick .\" 448153Sbostic .\" %sccs.include.redist.roff% 527700Smckusick .\" 6*62782Sbostic .\" @(#)dgramread.c 8.1 (Berkeley) 06/08/93 748153Sbostic .\" 827700Smckusick #include <sys/types.h> 927700Smckusick #include <sys/socket.h> 1027700Smckusick #include <netinet/in.h> 1127700Smckusick #include <stdio.h> 1227700Smckusick 1327700Smckusick /* 1427700Smckusick * In the included file <netinet/in.h> a sockaddr_in is defined as follows: 1527700Smckusick * struct sockaddr_in { 1627700Smckusick * short sin_family; 1727700Smckusick * u_short sin_port; 1827700Smckusick * struct in_addr sin_addr; 1927700Smckusick * char sin_zero[8]; 2027700Smckusick * }; 2127740Smckusick * 2227700Smckusick * This program creates a datagram socket, binds a name to it, then reads 2327883Skarels * from the socket. 2427700Smckusick */ 2527700Smckusick main() 2627700Smckusick { 2727883Skarels int sock, length; 2827700Smckusick struct sockaddr_in name; 2927883Skarels char buf[1024]; 3027700Smckusick 3127700Smckusick /* Create socket from which to read. */ 3227700Smckusick sock = socket(AF_INET, SOCK_DGRAM, 0); 3327700Smckusick if (sock < 0) { 3427700Smckusick perror("opening datagram socket"); 3527883Skarels exit(1); 3627700Smckusick } 3727700Smckusick /* Create name with wildcards. */ 3827700Smckusick name.sin_family = AF_INET; 3927700Smckusick name.sin_addr.s_addr = INADDR_ANY; 4027700Smckusick name.sin_port = 0; 4127700Smckusick if (bind(sock, &name, sizeof(name))) { 4227700Smckusick perror("binding datagram socket"); 4327883Skarels exit(1); 4427700Smckusick } 4527700Smckusick /* Find assigned port value and print it out. */ 4627700Smckusick length = sizeof(name); 4727700Smckusick if (getsockname(sock, &name, &length)) { 4827700Smckusick perror("getting socket name"); 4927883Skarels exit(1); 5027700Smckusick } 5127700Smckusick printf("Socket has port #%d\en", ntohs(name.sin_port)); 5227700Smckusick /* Read from the socket */ 5327883Skarels if (read(sock, buf, 1024) < 0) 5427700Smckusick perror("receiving datagram packet"); 5527700Smckusick printf("-->%s\en", buf); 5627700Smckusick close(sock); 5727700Smckusick } 58