5.9 close()和shutdown() — 別讓我再見到你的臉!

原文:https://beej.us/guide/bgnet/html/#close-and-shutdownget-outta-my-face

 

5.9 close()和shutdown() ---別讓我再見到你的臉!

       你已經整天都在發送(send()) 和接收 (recv()) 數據了,現在你準備關閉你的套接字描述符了。

這很簡單,你可以使用一般的 Unix 文件描述符的 close() 函數:

int close(sockfd);

  它將防止套接字上的數據讀寫。

任何在另一端讀寫socket的企圖都將返回錯誤信息。

 

如果想在關閉套接字上有更多一點的控制,可以使用函數 shutdown()。

int shutdown(int sockfd, int how);

sockfd: 套接字描述符

參數how 值:

  0 – 不允許接受

  1 – 不允許發送

  2 – 不允許發送和接受(和 close() 一樣)

shutdown() 成功時返回 0,失敗時返回 -1(同時設置 errno)

如果在UDP中使用shutdown(),那麼只不過是讓send() 和 recv() 不能使用;在使用了 connect() 後是還可以使用sockfd。

 

需要特別注意的是,shutdown()實際上並沒有關閉文件描述符,它只是改變了其可用性。 要釋放套接字描述符,您需要使用close()。

 

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