这章讲下产生SIGPIPE信号的原因
往一个已经收到FIN的套接字中写是允许的,接收到FIN仅仅代表对方不再发送数据。
如果对方进程不存在了,你还写数据那么会返回一个RST段RST段之后,如果再调用write就会产生SIGPIPE信号,对于这个信号直接忽略就ok了
singal(SIGPIPE,SIG_IGN);
五种I/O模型
阻塞I/O
非阻塞I/O
I/O复用(select和poll)
信号驱动I/O
异步I/O
阻塞I/O
recv进行阻塞
当有数据到来 会从内核空间拷贝到用户空间 recv返回
非阻塞I/O
recv设置为非阻塞模式(fcntl(fd,F_SETFEL,flag|O_NONBLOCK))
没有数据返回错误 -1 errono =EWOULDBLOCK
不停的轮询 直到有数据到来
应用范围很窄基本不会去用啦
I/O复用(select和poll)
使用select来实现
select可以管理多个文件描述符,一旦有一个或多个有数据到来就可以返回
在select中阻塞
信号驱动I/O
基本上不用 用户空间建立SIGIO信号。当有数据到来时就以信号的方式通知程序
异步I/O
递送一个应用层的缓冲区,即使没有数据到来也返回,当有数据到来之后,内核就将数据拷贝到应用层缓冲区
通知上层程序
本章节探讨了产生SIGPIPE信号的原因,包括在已接收FIN的套接字中写入数据的情况以及如何处理SIGPIPE信号。同时,介绍了五种I/O模型:阻塞I/O、非阻塞I/O、I/O复用、信号驱动I/O和异步I/O,详细解释了每种模型的工作原理和适用场景。
2005

被折叠的 条评论
为什么被折叠?



