《TCP/IP网络编程》 尹圣雨 P120~P124
调用Linux的close函数或者windows的closesocket函数是单方面断开连接,意味着完全断开。完全断开不仅指无法传输数据,也不能接收数据。
基于TCP的半关闭 Half-close,即“只关闭一部分数据交换中的使用的流”的方法应运而生。断开一部分连接是指,可以传输数据但无法接收,或可以接收数据但无法传输。
套接字和流Stream
两台主机通过套接字建立连接后进入可交换数据的状态,称“流形成的状态”。即把建立套接字后可交换数据的状态看作一种流。
在套接字的流中,数据只能向一个方向流动。
用来关闭其中一个流的showdown函数
#include<sys/socket.h>
int shutdown(int sock,int howto);
成功时返回0,失败时返回-1.
sock 需要断开的套接字文件描述符
howto 传递断开方式新
第二个参数决定断开连接的方式,其可能值如下:
SHUT_RD:断开输入流,套接字无法接收数据。即使输入缓冲收到数据也会抹去,而且无法调用输入相关函数。
SHUT_WR:断开输出流,无法传输数据。如果输出缓冲还留有未传输的数据,则将传递到目标主机。
SHUT_RDWR:同时断开I/O流
P120 为何需要半关闭
P121~P124 基于半关闭的文件传输程序