linux socket应用编程笔记2
16页1、linux Socket-应用编程5Socket Api编程进价2服务器端多进程并发子进程退出问题TCP回射客户/服务器模型总结TCP是个流协议q TCP是基于字节流传输的,只维护发送出去多少,确认了多少,没有维护消息与消息之间的边界,因而可能导致粘包问题。q 粘包问题解决方法是在应用层维护消息边界。僵进程与SIGCHLD信号服务器端避免僵尸进程的方法:1)通过忽略SIGCHLD信号,解决僵尸进程q signal(SIGCHLD, SIG_IGN)q2)通过wait方法,解决僵尸进程q signal(SIGCHLD, handle_sigchld);q wait(NULL)3)通过waitpid方法,解决僵尸进程q signal(SIGCHLD, handle_sigchld);q wait(-1, NULL, WNOHANG) q6Socket Api 与TCP/IP的11种状态 TCP/IP协议的11种状态 理解0:什么是主动套接字,什么是被动套接字?理解1:为什么TCP/IP要三次握手,和四次断开?理解2:客户端状态向前推进过程,服务器端状态向前推进过程理解3:执行主动关闭的那一
2、端,进入TIME_WAIT状态理解4:TIME_WAIT 时间是多长2MSL (2倍的最大生命期时间) 原因:(ACK y+1)如果发送失败可以重发。 服务器端处于closed状态,不等于客户端也处于closed状态。理解5:图上几种状态,还有一种CLOSING状态两端同时关闭将产生closing状态,最后双方都进入TIME_WAIT状态。实验:1) 关闭服务方子进程,观察TCP/IP状态2) 关闭客户端,观察TCP/IP状态。SIGPIPE如果对方socket已关闭,对等方再发写数据,则会产生SIGPIPE信号q SIGPIPE信号会让进程终止(man 7 signal,阅读SIGPIPE默认ACT)q 往一个已经接收FIN的套接中写是允许的,接收到FIN仅仅代表对方不再发送数据。q 在收到RST段之后,如果再调用write就会产生SIGPIPE信号,对于这个信号的处理我们通常忽略即可。signal(SIGPIPE, SIG_IGN); 结论:对SIGPIPE处理方法:1)忽略该信号即可signal(SIGPIPE, SIG_IGN);2)捕捉。改变默认行为。TCP/IP 的RST段
3、重置1)服务器端启动、客户端启动2)服务器端先kill与客户端通讯的子进程,服务器端会给客户端发送FIN分节此时:只代表服务器端不发送数据了,不能代表客户端不能往套接字中写数据。3)如果子进程此时写数据给服务器端(解除屏幕阻塞,输入字符aaaa),将要导致TCP/IP协议重置,产生RST段;产生SIGPIPE信号。4)所以,一般情况下,需要我们处理SIGPIPE信号,忽略即可。close与shutdown区别q close终止了数据传送的两个方向。q shutdown可以有选择的终止某个方向的数据传送或者终止数据传送的两个方向。q shutdown how=1就可以保证对等方接收到一个EOF字符,而不管其他进程是否已经打开了套接字。而close不能保证,直到套接字引用计数减为0时才发送。也就是说直到所有的进程都关闭了套接字。思考1客户端向服务器发送:FIN(close) E D C B A,问:服务器还能收到数据吗?服务器还可以向客户端回报文吗?客户端想在关闭之后,仍然能接收到回射服务器应答(shutdown)。思考2父进程中close(conn);会不会向客户端发送FIN报文段那?
4、文件的引用计数-1,当减少为0,才会发送引用计数。思考3: 客户端/shutdown(sock, SHUT_WR);只关闭了写;7五种I/O模型 阻塞I/O说明1:当上层应用app1调用recv系统调用时,如果对等方没有发送数据(缓冲区没有数据),上层应用app1将阻塞(默认行为,被linux内核阻塞);说明2:当对等方发送了数据,linux内核recv端缓冲区,有数据后,内核会把数据copy给用户空间。然后上层应用app1解除阻塞,执行下一步操作。非阻塞I/O说明1: 上层应用程序app2将套接字设置成非阻塞模式。说明2: 上层应用程序app2轮询调用recv函数,接受数据。若缓冲区没有数据,上层程序app2不会阻塞,recv返回值为-1,错误码是EWOULDBLOCK。说明3:上层应用程序不断轮询有没有数据到来。会造成上层应用忙等待。大量消耗CPU。很少直接用。应用范围小,一般和selectIO复用配合使用。I/O复用 说明1: 上层应用程序app3调用select机制(该机制有linux内核支持,避免了app3忙等待。),进行轮询文件描述符的状态变化。说明2:当select管理的
《linux socket应用编程笔记2》由会员卷****络分享,可在线阅读,更多相关《linux socket应用编程笔记2》请在金锄头文库上搜索。
linux共享内存专题编程笔记
GIF图形文件格式文档
附件4:拟晋升XXXX专业技术职务任职资格评审表
linux进程间通讯笔记
linux socket应用编程笔记3-
STL所有算法(70个)
①【简历模板】杨1
IO接口及常用IO设备
①【简历模板】韦有3
linux socket应用编程笔记1
附件6:高级工程师专业技术职务评审申报论文声明承诺书
linux socket应用编程笔记2
户籍迁入申请书 模板
①【简历模板】蛋炒饭2
附件3:专业技术职务任职资格申报表
GIF文件格式详解
wav文件格式分析详解
GIF文件结构与解码器
STL常用算法
linux管道专题编程笔记docx
2023-08-28 7页
2023-08-21 28页
2022-11-11 10页
2022-07-29 74页
2021-12-30 6页
2021-12-30 9页
2021-12-30 6页
2021-12-30 7页
2021-12-30 9页
2021-12-30 7页