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