AF UNIX 位址系列

2021-06-09 06:59:58 字數 2250 閱讀 2972

af_unix 位址系列(使用 af_unix 或 af_unix_ccsid 位址系列的套接字)可以是面向連線的(型別 sock_stream),也可以是無連線的(型別 sock_dgram)。兩種型別都很可靠,原因是沒有連線兩個程序的外部通訊函式。

unix 域資料報套接字的執行方式與 udp 資料報套接字有所不同。借助 udp 資料報套接字,客戶機程式就不必呼叫bind()函式,原因是系統會自動指定未使用的埠號。於是伺服器可將資料報傳送回該埠號。但是,使用 unix 域資料報套接字,系統不會自動指定客戶機的路徑名。因此,使用 unix 域資料報的所有客戶機程式必須呼叫bind()函式。在客戶機的bind()上指定的精確路徑名就是傳遞至伺服器的路徑名。因此,如果客戶機指定相對路徑名(即,並非以 / 開頭的全限定路徑名),除非伺服器以同一當前目錄執行,否則它不能向客戶機傳送資料報。

應用程式可能對此位址系列使用的示例路徑名就是 /tmp/myserver 或 servers/thatserver。借助 servers/thatserver,可使用並非全限定(未指定 /)的路徑名。這表示該項在檔案系統層次結構中的位置應根據當前工作目錄確定。

注意:檔案系統中的路徑名是啟用了 nls 的。

下圖舉例說明了 af_unix 位址系列的客戶機/伺服器關係。有關將環境設定為使用 af_unix 位址系列的詳細資訊,參見套接字程式設計的先決條件。

示例:使用 af_unix 位址系列的伺服器應用程式使用以下函式呼叫序列:

socket()函式返回表示端點的套接字描述符。該語句還標識將對此套接字使用帶有流傳輸(sock_stream)的 unix 位址系列。該函式返回表示端點的套接字描述符。還可使用socketpair()函式初始化 unix 套接字。 af_unix 或 af_unix_ccsid 是支援socketpair()函式的唯一位址系列。socketpair()函式返回未命名的和已連線的套接字描述符。

在建立套接字描述符之後,bind()函式獲取套接字的唯一名稱。 unix 域套接字的命名空間由路徑名組成。當套接字程式呼叫bind()函式時,會在檔案系統目錄中建立一項。如果路徑名已存在,則bind()失敗。因此,unix 域套接字程式應總是呼叫unlink()函式以在結束時除去該目錄項。

listen()允許伺服器接受入局客戶機連線。在此示例中,儲備設定為 10。這表示系統將對 10 個入局連線請求排隊,然後才開始拒絕入局請求。

recv()函式從客戶機應用程式接收資料。在此示例中,我們知道客戶機將傳送超過 250 位元組的資料。既然如此,就可以使用 so_rcvlowat 套接字選項指定在所有 250 位元組資料都到達之前不要喚醒recv()

send()函式將資料回傳至客戶機。

close()函式關閉所有開啟的套接字描述符。

unlink()函式從檔案系統除去 unix 路徑名。

示例:使用 af_unix 位址系列的客戶機應用程式使用以下函式呼叫序列:

socket()函式返回表示端點的套接字描述符。該語句還標識將對此套接字使用帶有流傳輸(sock_stream)的 unix 位址系列。該函式返回表示端點的套接字描述符。還可使用socketpair()函式初始化 unix 套接字。 af_unix 或 af_unix_ccsid 是支援socketpair()函式的唯一位址系列。socketpair()函式返回未命名的和已連線的套接字描述符。

接收到套接字描述符後,使用connect()函式來建立與伺服器的連線。

send()函式傳送指定的 250 位元組資料,該資料是在伺服器應用程式中使用 so_rcvlowat 套接字選項指定的。

recv()函式一直迴圈,直到所有 250 位元組資料都到達為止。

close()函式關閉所有開啟的套接字描述符。

linux 本地通訊例項 AF UNIX

程式說明 程式裡包含服務端和客戶端兩個程式,它們之間使用 af unix 實現本機資料流通訊。使用 af unix 域實際上是使用本地 socket 檔案來通訊。伺服器端 include include include include include include int main intargc...

Llinux程序間通訊 AF UNIX 套接字程式設計

af unix 位址系列 使用 af unix 或 af unix ccsid 位址系列的套接字 可以是面向連線的 型別 sock stream 也可以是無連線的 型別 sock dgram 兩種型別都很可靠,原因是沒有連線兩個程序的外部通訊函式。unix 域資料報套接字的執行方式與 udp 資料報...

筆試系列之IP位址相關計算

做了幾個筆試題發現ip位址的相關計算還挺多的,而且我還不會啊,這怎麼辦,趕快拿個小本本記下來吧。1 ip位址的概念 對於主機來說,ip位址就是乙個32位的二進位制 為了提高可讀性 方便記憶 將ip位址分為4段,每段有8位,再轉換為十進位制,中間用.隔開。舉例如下 2 ip位址的分類 ip位址可以分為...