Linux的close()函数与Windows的closesocket()意味着完全断开连接,这令他无法再收&发数据。
为了更加优雅的断开连接:只断收发其中的一个功能,close()和closesockI()就显得不太够用。
shutdown()
//linux
#include<sys/socket.h>
int shutdown(int sock,int howto);
int sock:需要断开的套接字的文件描述(句柄)
int howto: 选择断开方式
断开方式
有如下3个是Linux的
- SHUT_RD: 断开输入流
- SHUT_WR:断开输出流
- SHUT_RDWR:同时断开I/O流
如下三个是Windows的:
- SD_SEND
- SD_RECEIVE
- SD_BOTH
都是字面意思很好理解。
注意:断开输入流后,若BUF(缓冲区)存在未处理的收到的数据将会被抹去;断开输出流后,若缓冲区存在未发送的数据将会将其发送到对端;而SHUT_RDWR相当于分两次调用SHUT_RD与SHUT_WR。