天天看點

Unix Network Programming(16)---close 函數

通常Unix close函數也用來關閉套接字,并終止TCP連接配接。
#include <unistd.h>
int close(int sockfd);   /*傳回:若成功則為0,若出錯則為-1*/
           

預設行為:close函數把TCP套接字标記成已關閉,然後立即傳回到調用程序,該套接字描述符不能再由調用程序使用,也就是說它不能再作為read或write的第一個參數。然而TCP将嘗試發送已排隊等待發送到對端的任何資料,發送完畢後發生的是正常的TCP連接配接終止序列。

描述符引用計數

并發伺服器中父程序關閉已連接配接套接字隻是導緻相應描述符減1。既然引用計數值仍大于0,這個close調用并不引發TCP的四分組連接配接終止序列。

如果确實想在某個TCP連接配接上發送一個FIN,那麼可以改用shutdown函數以代替close。