1. 程式人生 > >[外一篇]關於Unix Domain Socket

[外一篇]關於Unix Domain Socket

咋一看名字,雖然有個socket,但是它的用場和常說的“網路”socket有所不同。它實際上是一種本地IPC,以socket為名是因為它和普通socket使用的介面是一致的。

雖說普通的socket也可以用作本地IPC,但是從效率上和功能上,要遜於Unix Domain Socket。首先,Unix Domain Socket雖然有socket的名,但是它的資料不需要經過網路協議棧處理,而是通過其它的機制,比經過協議棧要快;再次,重要的是,它提供普通socket提供不了的功能----在程序間傳遞描述符。

程序間傳遞描述符是個什麼概念呢?比如,主機有2個程序A和B,A有一個描述符fd(可以是任意的描述符,檔案或socket都可以),那麼A可以通過Unix Domain Socket將fd“傳”給B,B收到之後,就可以對fd所對應的檔案/socket進行操作。第一次聽到的時候感覺很神奇!

需要理解的時候,傳遞描述符並不是指將fd的值傳遞。將fd傳遞是沒有任何意義的,因為fd只是一個數字代號而已。所謂的傳遞,其實是在程序B的上下文中開啟fd所指的物件(會使物件的引用數加1),因此利用sendmsg傳送的fd值,和用recvmsg收到的fd值有可能是不相等的。

相關推薦

[]關於Unix Domain Socket

咋一看名字,雖然有個socket,但是它的用場和常說的“網路”socket有所不同。它實際上是一種本地IPC,以socket為名是因為它和普通socket使用的介面是一致的。 雖說普通的socket也可以用作本地IPC,但是從效率上和功能上,要遜於Unix Domain

由一個簡單需求到Linux環境下的syslog、unix domain socket

message python domain 服務器 import 需求:回到頂部  工作中有一個在Linux(debian8)環境下運行的服務器程序,用python語言實現,代碼中有不同優先級的日誌需要記錄,開發的時候都是使用python的logging模塊輸出到文件,示例代碼如下:  

Unix domain socket 簡介

進程間通訊 ima cli strlen side 組件 errno doc i++ Unix domain socket 又叫 IPC(inter-process communication 進程間通信) socket,用於實現同一主機上的進程間通信。socket 原本是

go語言實現unix domain socket 客戶端/服務端

sock domain tin soc reader ted ips for urn /*server.go */package mainimport ( "bufio" "fmt" &quo

linux一切皆檔案之Unix domain socket描述符(二)

一、知識準備 1、在linux中,一切皆為檔案,所有不同種類的型別都被抽象成檔案(比如:塊裝置,socket套接字,pipe佇列) 2、操作這些不同的型別就像操作檔案一樣,比如增刪改查等 3、主要用於:執行在同一臺機器上的2個程序相互之間的資料通訊 4、它們和網路檔案描述符非常相似(比如:TCP

基於libevent和unix domain socket的本地server

https://www.pacificsimplicity.ca/blog/libevent-echo-server-tutorial 根據這一篇寫一個最簡單的demo。然後開始寫client。 client調優 client最初的程式碼如下: 1 #include <sys/socke

Linux下程序間通訊方式 - UNIX Domain Socket

概述 Linux下程序通訊方式有很多,比較典型的有套接字,平時比較常用的套接字是基於TCP/IP協議的,適用於兩臺不同主機上兩個程序間通訊, 通訊之前需要指定IP地址. 但是如果同一臺主機上兩個程序間通訊用套接字,還需要指定ip地址,有點過於繁瑣. 這個時候就需要用到UNIX Domain Sock

UNIX Domain Socket

Unix domain socket 又叫 IPC(inter-process communication 程序間通訊) socket,用於實現同一主機上的程序間通訊。socket 原本是為網路通訊設計的,但後來在 socket 的框架上發展出一種 IPC 機制,就是 UNIX domain soc

android原始碼中採用Unix Domain Socket跨程序通訊

      今天看android原始碼Zygote程序啟動流程,無意間發現使用了一種檔案描述符作為跨程序通訊的地址,於是仔細研究了一下:  從字面來理解是傳統的Socket使用,但個人覺得不應該是,特地找資料學習了一下,下面的介紹比較詳細到位。又進一步瞭解一下,使用的其實是

linux一切皆檔案之Unix domain socket描述符

一、知識準備 1、在linux中,一切皆為檔案,所有不同種類的型別都被抽象成檔案(比如:塊裝置,socket套接字,pipe佇列) 2、操作這些不同的型別就像操作檔案一樣,比如增刪改查等 二、環境準備 元件 版本 OS CentOS Linux release 7.5.1804

UNIX DOMAIN SOCKET效率

nvidia 4.5 1.3 但是 效率 cti work mman running 關於UNIX DOMAIN SOCKET和普通udp socket的對比 在TX1(4核A57 1.7GHz)的板卡上進行測試,每個包大小設置為1024,全速收發,UDS的速度在90Mbp

將類的成員函式作為回撥函式(:友元函式)

問題的提出  我們已知道類具有封裝和資訊隱藏的特性。只有類的成員函式才能訪問類的私有成員,程式中的其他函式是無法訪問私有成員的。非成員函式可以訪問類中的公有成員,但是如果將資料成員都定義為公有的,這又破壞了隱藏的特性。另外,應該看到在某些情況下,特別是在對某些成員函式多次呼叫時,由於引數傳遞,型別檢查和安全性

unix Domain socket(python)

1. unix Domain Socket 簡介 Unix Domain Socket通常稱為 【unix域套介面】 或 【本地套介面】,它用於位於同一臺機器(作業系統)的程序間通訊。它已經被納入POSIX Operating Systems標準。 它支援以

UNIX Domain Socket使用

一、Socket概述 Socket最初用在基於TCP/IP網路間程序通訊中,以客戶端/伺服器模式進行通訊。 實現非同步操作,共享資源集中處理,提高客戶端響應能力。 Tcp通訊基本流程:   伺服器端                                                  

如何獲得unix domain socket的對端PID

1. 什麼是unix domain socket 2. 有兩種方法,第一種是通過猜測,第二種是debug linux核心 第一種方法的示例: [[email protected] ipc]$ /usr/sbin/lsof -p 31854 COMMAND

使用psql命令基於udp(unix-domain-socket)協議連線postgresql資料庫

對於資料庫連線而言,通過netstat可以檢視當前連線協議,是udp還是tcp(包括ipv4和ipv6)。 實驗1: 如果本地直接使用psql命令連線,則為udp: 視窗1: postgres@pgdb-> psql psql (9.5.7) T

OpenStack優化以及配置網(接上前:CentOS7.5上配置Openstack-Rocky)

接上前一篇:https://www.cnblogs.com/zjd1396/p/9899634.html 四.優化 4.1計算節點磁碟空間管理   上圖可以看出本地磁碟空間總共只有98G,而本機的實際配置如下: [[email protected] ~]# df -h

socket unix domain IPC程式碼示例

僅供參考: 服務端:socket->bind->listen->send/recv->close 客戶端:socket->bind->connect->send/recv->close #include <sys/socke

讀懂瀏覽器結構

瀏覽器結構 瀏覽器的主要元件: 1、使用者介面:包括位址列、前進/後退按鈕,書籤選單等。除了瀏覽器主視窗用於顯示 網頁外,其他顯示的部分屬於使用者介面。 2、瀏覽器引擎:在使用者介面和渲染引擎直接傳送指令。一方面提供對渲染引擎的高階介面,另一方面提供初始化載入URL和其他使用者介面的方法,如重新整

Netty堆記憶體洩漏排查,這全講清楚了

上篇文章介紹了Netty記憶體模型原理,由於Netty在使用不當會導致堆外記憶體洩漏,網上關於這方面的資料比較少,所以寫下這篇文章,專門介紹排查Netty堆外記憶體相關的知識點,診斷工具,以及排查思路提供參考 現象 堆外記憶體洩漏的現象主要是,程序佔用的記憶體較高(Linux下可以用top命令檢視),但J