Linux網路程式設計(六) shutdown函式

2021-06-23 01:28:23 字數 572 閱讀 2378

終止網路連線一般使用close函式。但是close有兩個限制,可以使用shutdown函式來避免

(1)close把描述符的引用計數減一,僅在該計數變為0時才關閉套接字。使用shutdown可以不管引用計數就激發tcp的正常連線終止序列

(2)close終止讀和寫兩個方向的資料傳送。有時我們需要通知對端我們已經完成了資料傳送,即使對端仍有資料要傳送給我們

1: #include
2: int shutdown(int sockfd,int howto);
3: //返回:成功為0,若出錯返回-1

該函式的行為依賴於howto:

shut_rd

關閉連線的讀這一半——套接字中不再有資料可以接收,而且套接字接收緩衝區中的資料被丟棄

乙個tcp套接字這樣呼叫shutdown後,由該套接字接收來自對端的資料將被確認,然後悄然丟棄

shut_wr

關閉連線的寫這一半——對於tcp套接字,這稱為半關閉。當前在套接字傳送緩衝區中的資料將被傳送,後跟正常的終止序列

shut_rdwr

連線的讀半部和寫半部都關閉

socket程式設計 優雅的斷開連線shutdown

呼叫 close closesocket 函式意味著完全斷開連線,即不能傳送資料也不能接收資料,這種 生硬 的方式有時候會顯得不太 優雅 上圖演示了兩台正在進行雙向通訊的主機。主機a傳送完資料後,單方面呼叫 close closesocket 斷開連線,之後主機a b都不能再接受對方傳輸的資料。實際...

Linux C程式設計 六 之 網路程式設計 上

網路協議棧 網路基礎 tcp連線的三次握手和四次揮手 三次握手 tcp協議通過三個報文段完成連線的建立,這個過程稱為三次握手 three way handshake 過程如下圖所示。當客戶端呼叫connect時,觸發了連線請求,向伺服器傳送了syn j包,這時connect進入阻塞狀態 伺服器監聽到...

Linux網路程式設計

linux網路程式設計 當然,我們現在,將要開始編寫的第乙個網路程式,雖然非常簡單,但是卻可以很 清楚的說明大部分編寫網路程式需要的基本概念,好了先讓我們看看網路程式的tcp服 務器端的編寫步驟 1.和伺服器的步驟一樣。2.通過設定套介面位址結構,我們說明,客戶端要與之通訊的伺服器的ip位址和 埠。...