dgram.c

来自「unix linux 编程实践源代码」· C语言 代码 · 共 71 行

C
71
字号
/*************************************************************** *	dgram.c *	support functions for datagram based programs */ #include	<stdio.h>#include	<unistd.h>#include	<sys/types.h>#include	<sys/socket.h>#include	<netinet/in.h>#include	<arpa/inet.h>#include	<netdb.h>#include	<string.h>#define   HOSTLEN  256int make_internet_address();int make_dgram_server_socket(int portnum){	struct  sockaddr_in   saddr;   /* build our address here */	char	hostname[HOSTLEN];     /* address 	         */	int	sock_id;	       /* the socket             */	sock_id = socket(PF_INET, SOCK_DGRAM, 0);  /* get a socket */	if ( sock_id == -1 ) return -1;	/** build address and bind it to socket **/	gethostname(hostname, HOSTLEN);         /* where am I ?         */	make_internet_address(hostname, portnum, &saddr);	if ( bind(sock_id, (struct sockaddr *)&saddr, sizeof(saddr)) != 0 )	       return -1;	return sock_id;}int make_dgram_client_socket(){	return socket(PF_INET, SOCK_DGRAM, 0);}int make_internet_address(char *hostname, int port, struct sockaddr_in *addrp)/* * constructor for an Internet socket address, uses hostname and port *   (host,port) -> *addrp */{	struct hostent	*hp;	bzero((void *)addrp, sizeof(struct sockaddr_in));	hp = gethostbyname(hostname);	if ( hp == NULL ) return -1;	bcopy((void *)hp->h_addr, (void *)&addrp->sin_addr, hp->h_length);	addrp->sin_port = htons(port);	addrp->sin_family = AF_INET;	return 0;}int get_internet_address(char *host, int len, int *portp, struct sockaddr_in *addrp)/* * extracts host and port from an internet socket address *   *addrp -> (host,port) */{	strncpy(host, inet_ntoa(addrp->sin_addr), len );	*portp = ntohs(addrp->sin_port);	return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?