1. 程式人生 > >TCP/IP程式設計之shutdown函式詳解

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

相關推薦

TCP/IP程式設計shutdown函式

前述: 終止網路連線的通常方法是呼叫close函式,close把描述符的引用計數減1,僅在該計數變為0時才關閉套接字。同時close會終止讀和寫兩個方向的資料傳送。 使用shutdown函式可以不管引用計數就激發TCP的正常連線關閉,同時shutdown也可以選擇性的關

TCP/IP程式設計connect函式

函式原型: CONNECT(2) Linux Programmer's Manual CONNECT(2) NAME connect - initiate a connection on a

TCP/IP程式設計fcntl函式

fcntl函式可執行各種描述符操作,在這裡我們只需要關心如何設定套接字為非阻塞式I/O 函式原型: FCNTL(2) Linux Programmer's M

Matlabgraythresh()函式

1 函式簡介 函式功能:使用 最大類間方差法找到圖片的一個合適的閾值(threshold)。在使用 im2bw函式將灰度影象轉換為二值影象時,需要設定一個閾值,這個函式可以幫助我們獲得一個合適的閾值。利用這個閾值通常比人為設定的閾值能更好地把一張灰度影象轉換為二值影象

Linux I/O複用select函式

置頂 2017年02月12日 20:50:08 難免有錯_ 閱讀數:7438更多 select函式的功能和呼叫順序 使用select函式時統一監視多個檔案描述符的: 1、 是否存在套接字接收資料? 2、 無需阻塞傳輸資料的套接字有哪些? 3、 哪些套接字發生了

OSI七層與TCP/IP五層網路架構

(1)OSI七層模型 OSI中的層 功能 TCP/IP協議族 應用層 檔案傳輸,電子郵件,檔案服務,虛擬終端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 表示層 資料格式化,程式碼轉換,資料加密 沒有協議 會話層 解除或建立與別的接點的聯絡 沒有協

NIO程式設計ServerSocketChannel用法

之前一直看不懂NIO中的ServerSocketChannel和SocketChannel的區別,看了這篇博文,感覺通俗易懂,於是決定分享一下。。。。 在用nio通訊的過程我用以下情景給你模擬: 學校(ServerSocketChannel) 2。 學校教務處

十二、併發程式設計AbstractQueuedSynchronizer(AQS)

一、簡介 1、AQS(java.util.concurrent.locks.AbstractQueuedSynchronizer)是用來構建鎖或者其他同步元件(訊號量、事件等)的基礎框架類。 2、AQS的主要使用方式是繼承它作為一個內部輔助類實現同步原語,它可以簡化你的併發

ORACLE函式GREATEST函式例項

1語法GREATEST(expr_1, expr_2, ...expr_n)2說明GREATEST(expr_1, expr_2, ...expr_n)函式從表示式(列、常量、計算值)expr_1, e

計網--OSI七層與TCP/IP五層網路架構

OSI和TCP/IP是很基礎但又非常重要的網路基礎知識,理解得透徹對運維工程師來說非常有幫助。今天偶又複習了一下: (1)OSI七層模型 OSI中的層 功能 TCP/IP協議族 應用層 檔案傳輸,電子郵件,檔案服務,虛擬終端 TFTP,HTTP,SNMP,FT

mysqlgroup_concat函式:將相同的行組合起來

函式作用: 當SQL語句中使用到....group by....的時候, 該函式能夠將相同的行組合起來。 函式語法: group_concat( [DISTINCT]  要連線的欄位   [Order BY排序欄位ASC/DESC]   [Separator '分隔符'

Android程式設計DialogFragment原始碼(一)

DialogFragment是Fragment家族成員之一,如果你把它簡單的理解成Dialog,那就錯了。它的確可以做作dialog顯示,還可以顯示出自己定義的Dialog或者AlertDialog,但它同時也是一個Fragment。 按照官方的話來理解就是,你既可以把它當

javascript學習記錄(二)-function函式的應用sort()函式

javascript 雖然式一種弱指令碼語言,但是他也是支援函式的宣告的,此處的函式和java中的函式是有很大差別的。其中值得一提的是javascript 不支援重寫舉個栗子:function someFunction(num1){ console.info(num1);

Pythonprint函式

輸出的 print 函式總結: 1. 字串和數值型別 可以直接輸出 >>> print(1) 1 >>> print("Hello World") Hello World 2.變數無論什麼型別,數值,布林,列表,字典...都可以直接輸出

Spark核心程式設計RDD持久化

RDD持久化原理 Spark非常重要的一個功能特性就是可以將RDD持久化在記憶體中。當對RDD執行持久化操作時,每個節點都會將自己操作的RDD的partition持久化到記憶體中,並且在之後對該RDD的反覆使用中,直接使用記憶體快取的partition。這樣的

shell程式設計awk命令

linux本篇部落格主要介紹linux常用命令中的對文字和資料進行處理的命令awk的用法。awk命令awk是一種程式語言,用於在linux/unix下對文字和資料進行處理。資料可以來自標準輸入(stdin)、一個或多個檔案,或其它命令的輸出。它支援使用者自定義函式和動態正則表示式等先進功能,是linux/un

Lua函數語言程式設計和區域性函式

         函數語言程式設計中的函式這個術語不是指計算機中的函式(實際上是Subroutine),而是指數學中的函式,即自變數的對映。也就是說一個函式的值僅決定於函式引數的值,不依賴其他狀態。比如sqrt(x)函式計算x的平方根,只要x不變,不論什麼時候呼叫,呼叫幾次

Java網路程式設計流的

前言 大部分網路程式做的事情就是接受輸入併產生輸出。讀伺服器傳送過來的資料與讀取本地檔案的資料並沒有多大的區別,同時伺服器將資料傳送給客戶端與寫資料到本地檔案也很像。 Java的IO操作基於streams實現的。輸入流讀資料,輸出流寫資料。 該系列文

網路程式設計Selector & SelectionKey(一)

NIO能通過單個執行緒管理多個I/O通道,主要就是通過選擇器Selector來實現的。 public abstract class Selector { protected Selector

SQL開窗函式--可代替聚合函式使用

       在沒學習開窗函式之前,我們都知道,用了分組之後,查詢欄位就只能是分組欄位和聚合的欄位,這帶來了極大的不方便,有時我們查詢時需要分組,又需要查詢不分組的欄位,每次都要又到子查詢,這樣顯得sql語句複雜難懂,給維護程式碼的人帶來很大的痛苦,然而開窗函數出現了,