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。