TCP/IP程式設計之shutdown函式詳解
前述:
終止網路連線的通常方法是呼叫close函式,close把描述符的引用計數減1,僅在該計數變為0時才關閉套接字。同時close會終止讀和寫兩個方向的資料傳送。
使用shutdown函式可以不管引用計數就激發TCP的正常連線關閉,同時shutdown也可以選擇性的關閉讀或者寫。
函式原型:
SHUTDOWN(2) Linux Programmer's Manual SHUTDOWN(2) NAME shutdown - shut down part of a full-duplex connection SYNOPSIS #include <sys/socket.h> int shutdown(int sockfd, int how);
引數說明:
(1) sockfd是要關閉的套接字
(2) 該函式的行為依賴於how引數的值
a) SHUT_RD,關閉連線的讀這一半,套接字中不再有資料可接收,而且套接字接收緩衝區中的現有資料都被丟棄,程序不能再對這樣的套接字呼叫任何讀函式。該套接字接收的來自對端的任何資料都被確認,然後悄然丟棄。
b) SHUT_WR,關閉連線的寫這一半,當前留在套接字傳送緩衝區的資料都將被髮送掉,後跟TCP的正常連線終止序列,程序不能再對這樣的套接字呼叫任何寫函式。
c) SHUT_RDWR,連線的讀半部與寫半部都關閉。
返回值:
若成功返回0,若出錯返回-1
參考:《unix網路程式設計》·卷1