调用close() 之后,进程不能再使用该描述符。 但是已经发送队列中的数据还是会继续发送,等到发送回再发起四次挥手。
close() 在套接字引用计数为0时,才发起四次挥手。
shutdown() 直接出发四次挥手。
父进程fork出子进程处理已连接的套接字后,应该立即调用close()。 避免父进程描述符耗尽,且客户连接都没有被珍重终止。
对端(假设为client)调用close(),即向server发送了FIN报文,关闭了单向通道。此时如果server没有感知到还在write,第一次write可以调用成功(返回要发送的字节数)。 数据包可以发送到client端。但是对端会返回RST报文。
如果再调用write()(第二次), 则会受到SIG_PIPE信号,导致进程退出。 一般的做法是捕获SIGPIPE信号,或者忽略它。
持续更新中。。。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。