strcliselect02.c

来自「《unix网络编程第二卷》中的源代码」· C语言 代码 · 共 49 行

C
49
字号
#include	"unp.h"voidstr_cli(FILE *fp, int sockfd){	int			maxfdp1, stdineof = 0;	fd_set		rset;	char		sendline[MAXLINE], recvline[MAXLINE];	heartbeat_cli(sockfd, 1, 5);	FD_ZERO(&rset);	for ( ; ; ) {		if (stdineof == 0)			FD_SET(fileno(fp), &rset);		FD_SET(sockfd, &rset);		maxfdp1 = max(fileno(fp), sockfd) + 1;		if (select(maxfdp1, &rset, NULL, NULL, NULL) < 0) {			if (errno == EINTR)				continue;			else				err_sys("select error");		}		if (FD_ISSET(sockfd, &rset)) {	/* socket is readable */			if (Readline(sockfd, recvline, MAXLINE) == 0) {				if (stdineof == 1)					return;		/* normal termination */				else					err_quit("str_cli: server terminated prematurely");			}			Writen(STDOUT_FILENO, recvline, strlen(recvline));		}		if (FD_ISSET(fileno(fp), &rset)) {  /* input is readable */			if (Fgets(sendline, MAXLINE, fp) == NULL) {				stdineof = 1;				alarm(0);			/* turn of heartbeat */				Shutdown(sockfd, SHUT_WR);	/* send FIN */				FD_CLR(fileno(fp), &rset);				continue;			}			Writen(sockfd, sendline, strlen(sendline));		}	}}

⌨️ 快捷键说明

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