《TCP/IP网络编程》第7章 笔记&代码&注释

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。

代码(Windows含客户端&服务器端,省略异常代码)

https://github.com/ChristmasError/TCP-IP-Network-programming/tree/master/%E7%AC%AC%E4%B8%83%E7%AB%A0%20%E4%BC%98%E9%9B%85%E7%9A%84%E6%96%AD%E5%BC%80%E5%A5%97%E6%8E%A5%E5%AD%97%E8%BF%9E%E6%8E%A5

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章