您的位置:首页 > 理论基础 > 计算机网络

UNIX网络编程学习(10)续--处理accept返回EINTR错误的TCP服务器程序最终(正确)版本

2012-04-02 10:44 453 查看
tcpcliserv/tcpserv04.c

#include	"unp.h"

int
main(int argc, char **argv)
{
int					listenfd, connfd;
pid_t				childpid;
socklen_t			clilen;
struct sockaddr_in	cliaddr, servaddr;
void				sig_chld(int);

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);

Bind(listenfd, (SA *) &servaddr, sizeof(servaddr));

Listen(listenfd, LISTENQ);

Signal(SIGCHLD, sig_chld);	/* must call waitpid() */

for ( ; ; ) {
clilen = sizeof(cliaddr);
if ( (connfd = accept(listenfd, (SA *) &cliaddr, &clilen)) < 0) {
if (errno == EINTR)
continue;		/* back to for() */
else
err_sys("accept error");
}

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 */
}
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐