5.卷1(套接字联网API)---TCP客户/服务器程序示例

1.阻塞与某个慢系统调用的进程捕获信号并返回,该系统调用可能返回EINTR错误。 
  正确处理慢系统调用 : 
	for ( ; ; ) {
		clilen = sizeof(cliaddr);
		if ( ( conndf = accpet(listenfd, (SA *)&cliaddr, &clilen) < 0 ) ) {
			if ( errno == EINTR ) {
				continue;
			} else {
				err_sys("accept error");
			}
		}
	}

2.Unix中信号不一般不排队,信号处理函数一般只执行一次。
  使用 waitpid(), 而不是 wait。waitpid 函数,指定 WNOHANG 选项,如果有
  尚未终止的子进程运行时,不要阻塞。
3.编写网络程序时,可能会遇到的3种情况:
	1.当fork子进程时,必须捕获 SIGCHILD 信号;
	2.当捕获信号时,必须处理被中断的系统调用;
	3.SIGCHILD 的信号处理函数必须被正确编写,应该使用waitpid函数以免留下僵死进程。

4.服务器进程被终止
	服务器一段先发送FIN,如果客户端再发送数据,服务器会返回一个RST,
	如果客户端read在接受 RST 之前,客户端收到一个未预期的EOF(服务器过早终止)。
	如果客户端read在接受到 RST 之后,read 返回一个 ECONNREST,"connection reset by peer", 对方复位连接错误。


5.服务端进程已经发送FIN,第一次写引发 RST。 再次写,引发 SIGPIPE 信号

6.如果服务器主机奔溃,客户端阻塞在read上,超过一定时间返回 timeout 超时或者主机不可达错误。
  这是主动发送错误才发现的,还有另外的技术。SO_KEEPALIVE套接字选项。
void sig_child(int signo)
{
	pid_t pid;
	int stat;


	while ( (pid = waitpid(-1,&stat,WNOHANG)) > 0 ) {  // 循环获取已经终止子进程的状态, WNOHANG如果有尚未终止的子进程,不阻塞
		printf("child %d terminated \n",pid);
	}
	return;
}

1.概述






处理 SIGCHLD 信号



wait 和 waitpid 函数



accpet 返回前终止:



服务器进程终止:



SIGPIPE 信号:



服务器主机崩溃:



服务器主机崩溃后重启:









  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TCP/IP网络互连技术.Ⅲ.客户/服务器编程和应用(Windows套接字版)》是一本介绍TCP/IP网络编程以及客户/服务器应用的技术指南,主要针对使用Windows套接字进行网络编程的开发人员。该书总结了TCP/IP的基本原理、协议和常见应用,提供了丰富的示例代码和实用的案例,帮助读者快速掌握网络编程和客户/服务器应用的开发。 该书首先介绍了TCP/IP网络协议栈的结构和工作原理,讲解了套接字编程的基本概念和使用方法。然后,作者详细讲解了Windows平台上的套接字编程API,包括套接字的创建、绑定、监听、连接、发送和接收等操作。读者可以通过学习这些API,了解如何在Windows环境下进行网络编程。 接下来,该书介绍了常见的客户/服务器模型,并通过实例演示了如何开发客户/服务器应用。读者可以学习如何在服务器端创建套接字并监听客户端的连接请求,同时也可以学习如何在客户端创建套接字并与服务器建立连接。通过这些实例,读者可以了解服务器端和客户端之间的通信过程,以及如何处理多个客户端的并发连接。 此外,该书还介绍了如何实现简单的网络协议,如HTTP、FTP和SMTP等。通过详细的实例代码,读者可以学习到如何解析和生成这些协议的数据包,以及如何进行相应的网络通信。 总的来说,《TCP/IP网络互连技术.Ⅲ.客户/服务器编程和应用(Windows套接字版)》是一本适合想要学习TCP/IP网络编程和客户/服务器应用开发的读者的技术指南。通过学习这本书,读者可以深入了解网络编程的基本原理和技术,并能够使用Windows套接字进行网络应用的开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值