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 */ } }
相关文章推荐
- Socket进程处理被中断的系统调用及Accept函数返回EINTR错误处理
- C语言学习8:malloc返回的void*类型指针不可以做更改,free双重释放,二维数组的初始化和打印,a和a[0]和a[0][0]的区别,数组指针(*p)[3],指针数组*a[10],动态内存分配版约瑟夫环,动态分配版去空格和逗号处理,二级指针与二维数组互用
- UNIX网络编程(10)--TCP 回射服务器程序和客户程序
- UNIX网络编程学习(14)--使用select正确处理EOF的str_cli函数修订版
- 用高版本vs编译旧VC代码时,如何处理无法从“const char [10]”转换为“LPCWSTR”的错误
- UNIX网络编程学习(14)--使用select正确处理EOF的str_cli函数修订版
- UNIX网络编程学习(14)--使用select正确处理EOF的str_cli函数修订版
- git学习------> 解决Gitlab 版本升级之后,发送 merge request 出现 http 500 的返回码错误
- go语言学习笔记(10) 错误处理
- UNIX网络编程学习(15)--使用单进程和select的TCP服务器程序
- Unix网络编程学习笔记之第5章 TCP客户端/服务器程序示例
- UNIX网络编程学习(16)--使用poll的TCP服务器程序
- UNIX网络编程学习(14)--使用select正确处理EOF的str_cli函数修订版
- exp-00003的错误|如何从oracle10备份导入到oracle9 数据库中|如何从oracle的高版本备份导入到低版本中
- HTTP常见的错误返回代码处理过程
- winsock accept立即返回,GetLastError得到10014错误
- 一步步学习SPD2010--第十一章节--处理母版页(10)--重置母版页到网站定义
- TQ2440开发板学习纪实(10)--- 实现多任务处理,最简单OS模型
- Android学习之——(3)项目中的WebService返回数据处理学习
- SVC标准版本:200711中 G.6.1前面部分理解—未必正确,仅仅是学习中的理解,多提意见。