UNIX网络编程卷一 学习笔记 第六章 I/O复用:select和poll函数(部分)

终止网络连接的通常方法是调用close函数,但它有两个限制:
1.close函数把描述符的引用计数-1,仅在计数变为0时才关闭套接字,shutdown函数不管引用计数就激发TCP的正常连接终止序列。
2.close函数终止读和写两个方向上的数据传送,shutdown函数可关闭一个方向上的数据传送。TCP是全双工的,有时需要告知对端我们已完成了数据发送,即使对端仍有数据要发送给我们。
UNIX网络编程卷一 学习笔记 第六章 I/O复用:select和poll函数(部分)
UNIX网络编程卷一 学习笔记 第六章 I/O复用:select和poll函数(部分)
howto参数的值:
1.SHUT_RD:关闭连接的读这一半,套接字接收缓冲区中的现有数据被丢弃。进程不能再对这样的套接字调用任何读函数。该套接字会接收来自对端的任何数据并确认,然后丢弃这些数据。默认,写入一个路由套接字中的所有数据都被作为同一个主机上所有路由套接字的可能输入环回,有些程序把第二个参数指定为SHUT_RD来调用shutdown以防止环回复制,防止环回复制的另一个方法是关闭SO_USELOOPBACK套接字选项。
2.SHUT_WR:关闭连接的写这一半,对于TCP套接字,这称为半关闭,当前留在套接字发送缓冲区中的数据将被发送,后跟TCP的正常连接终止序列。进程不能再对这样的套接字调用任何写函数。
3.SHUT_RDWR:连接的读半部和写半部都被关闭,等效于用以上两个参数调用两次shuwdown。