《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

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