📄 dgram.c
字号:
/*************************************************************** * 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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -