經過一番 send() 和 recv() 的數據傳輸後,我們需要妥善關閉套接字。最簡單的方法是使用標準的 Unix 文件描述符關閉函數 close():
int close(int sockfd);
這將阻止套接字上的進一步讀寫操作。對端嘗試讀寫時將收到錯誤信號。
如果需要更精確地控制關閉方向(只關閉發送、只關閉接收、或雙向關閉),可以使用 shutdown():
int shutdown(int sockfd, int how);
how 參數取值:
0(SHUT_RD):禁止接收。1(SHUT_WR):禁止發送。2(SHUT_RDWR):禁止發送和接收(等同於 close())。返回值:成功返回 0,失敗返回 -1 並設置 errno。
注意:在無連接的數據報套接字上調用 shutdown() 只是讓 send() 和 recv() 失效(記住,如果在數據報套接字上調用過 connect(),則可以使用這兩個函數)。
摘自 xiaobin_HLJ80 的專欄