Unix网络编程上卷--第5章

     在三路握手中,客户接收到三路握手的第二个分节时,connect函数返回,而服务器要直到接收到三路握手的第三个分节accept函数才返回(即connect返回之后再过一半RTT返回)。

使用命令:

%:ps -A -o pid,ppid,tty,stat,args,wchan

查看进程的各个属性。

   网络编程中可能会遇到的问题:

1,用fork子进程时,必须捕获SIGCHLD信号。(否则可能会出现大连僵尸(zombie)进程,影响系统工作)

2,捕获信号时,有可能会中断某些系统调用。

3,SIGCHLD的额信号处理函数必须正确编写,应使用waitpid函数以免留下僵尸进程。

  服务器进程终止:

客户发送数据到服务器(注意,此处是服务器,TCPf服务器,而不是服务器进程)时,之前连接的套接口的进程(服务器进程)已经终止,则服务器响应一个RST。

  服务器主机崩溃:

客户发送数据不能到达服务器,则TCP会一直向服务器重传,或者中间某个路由器通过ICMP告诉客户机“主机不可达”(EHOSTUNREACH).

 服务器主机崩溃后重启:

服务器主机崩溃后重启,则会失去所有之前的TCP连接信息。当客户的TCP数据到达服务器时,服务器回复一个RST。


Unix系统关机时,init进程通常先给所有进程发送SIGTERM信号(该信号可以被捕获),再等一段固定的时间(往往是5~20秒),然后给所有仍在运行的进程发送SIGKILL信号(该信号不能被捕获)。所以,想要在关机之前做一些事情(比如保存数据)的进程要捕获SIGTERM,并作出相应处理。

在网络中传送数据时,可能因为网络字节序跟主机字节序的不同而造成数据传输出错。需要注意。


你可能感兴趣的:(编程,tcp,网络,unix,服务器,路由器)