⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 udpservselect01.c

📁 unix网络编程第一卷socket编程书上的全部源代码
💻 C
字号:
/* include udpservselect01 */#include	"unp.h"intmain(int argc, char **argv){	int					listenfd, connfd, udpfd, nready, maxfdp1;	char				mesg[MAXLINE];	pid_t				childpid;	fd_set				rset;	ssize_t				n;	socklen_t			len;	const int			on = 1;	struct sockaddr_in	cliaddr, servaddr;	void				sig_chld(int);		/* 4create listening TCP socket */	listenfd = Socket(AF_INET, SOCK_STREAM, 0);	bzero(&servaddr, sizeof(servaddr));	servaddr.sin_family      = AF_INET;	servaddr.sin_addr.s_addr = htonl(INADDR_ANY);	servaddr.sin_port        = htons(SERV_PORT);	Setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));	Bind(listenfd, (SA *) &servaddr, sizeof(servaddr));	Listen(listenfd, LISTENQ);		/* 4create UDP socket */	udpfd = Socket(AF_INET, SOCK_DGRAM, 0);	bzero(&servaddr, sizeof(servaddr));	servaddr.sin_family      = AF_INET;	servaddr.sin_addr.s_addr = htonl(INADDR_ANY);	servaddr.sin_port        = htons(SERV_PORT);	Bind(udpfd, (SA *) &servaddr, sizeof(servaddr));/* end udpservselect01 *//* include udpservselect02 */	Signal(SIGCHLD, sig_chld);	/* must call waitpid() */	FD_ZERO(&rset);	maxfdp1 = max(listenfd, udpfd) + 1;	for ( ; ; ) {		FD_SET(listenfd, &rset);		FD_SET(udpfd, &rset);		if ( (nready = select(maxfdp1, &rset, NULL, NULL, NULL)) < 0) {			if (errno == EINTR)				continue;		/* back to for() */			else				err_sys("select error");		}		if (FD_ISSET(listenfd, &rset)) {			len = sizeof(cliaddr);			connfd = Accept(listenfd, (SA *) &cliaddr, &len);				if ( (childpid = Fork()) == 0) {	/* child process */				Close(listenfd);	/* close listening socket */				str_echo(connfd);	/* process the request */				exit(0);			}			Close(connfd);			/* parent closes connected socket */		}		if (FD_ISSET(udpfd, &rset)) {			len = sizeof(cliaddr);			n = Recvfrom(udpfd, mesg, MAXLINE, 0, (SA *) &cliaddr, &len);			Sendto(udpfd, mesg, n, 0, (SA *) &cliaddr, len);		}	}}/* end udpservselect02 */

⌨️ 快捷键说明

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