下面說說close和shutdown兩個函式的差別,兩個函式在網路程式設計中都被人為是來關閉套接字的,差別如下:
1.操作本質不同 close是檔案系統VFS的一個通用函式 shutdown是專門針對socket套接字設立的函式 SOCKET在unix中本就是以檔案的形式呈現給大家的,在每建立一個socket時,會對應建立一個檔案與之對應,返回檔案描述符, 具體的結構在此不詳述,在呼叫close時實際是關閉了減少了檔案描述符,當檔案描述符引用為0時,則會刪除檔案,關閉套接字。 而shutdown是直接對socket的操作,相當於設定了socket的屬性,可以設定為只讀,只寫,或者直接關閉,但不會操作與此socket相關 的檔案
2.兩者操作的效果一同 close的操作跟設定選項LINGER有關,此選項是設定當用戶呼叫close後是否等待把當前緩衝區的資料傳送完畢後再關閉套接字 LINGER結構有兩個值,一個是on,一個是time 當on為0時,預設情況,使用者傳送完分組,然後傳送FIN分組 當on為1時,time為0,則使用者直接傳送RST分組 當on為1時,time為非0,則使用者等待time值然後傳送FIN分組,如果time到了但使用者沒有傳送完資料,則返回錯誤EWOULDBLOCK SHUTDOWN SHUT_RD,套接字不能再發出接收請求,程序仍然可以往套接字傳送...
下面說說close和shutdown兩個函式的差別,兩個函式在網路程式設計中都被人為是來關閉套接字的,差別如下:
1.操作本質不同 close是檔案系統VFS的一個通用函式 shutdown是專門針對socket套接字設立的函式 SOCKET在unix中本就是以檔案的形式呈現給大家的,在每建立一個socket時,會對應建立一個檔案與之對應,返回檔案描述符, 具體的結構在此不詳述,在呼叫close時實際是關閉了減少了檔案描述符,當檔案描述符引用為0時,則會刪除檔案,關閉套接字。 而shutdown是直接對socket的操作,相當於設定了socket的屬性,可以設定為只讀,只寫,或者直接關閉,但不會操作與此socket相關 的檔案
2.兩者操作的效果一同 close的操作跟設定選項LINGER有關,此選項是設定當用戶呼叫close後是否等待把當前緩衝區的資料傳送完畢後再關閉套接字 LINGER結構有兩個值,一個是on,一個是time 當on為0時,預設情況,使用者傳送完分組,然後傳送FIN分組 當on為1時,time為0,則使用者直接傳送RST分組 當on為1時,time為非0,則使用者等待time值然後傳送FIN分組,如果time到了但使用者沒有傳送完資料,則返回錯誤EWOULDBLOCK SHUTDOWN SHUT_RD,套接字不能再發出接收請求,程序仍然可以往套接字傳送...