unix Domain socket(python)
1. unix Domain Socket 簡介
Unix Domain Socket通常稱為 【unix域套介面】 或 【本地套介面】,它用於位於同一臺機器(作業系統)的程序間通訊。它已經被納入POSIX Operating Systems標準。
它支援以下三種方式資料傳輸:
(1) 可靠的位元組流傳輸(SOCK_STREAM, 對應TCP);
(2)有序、可靠的資料包傳輸(SOCK_SEQPACKET);
(3)無序、不可靠的資料包傳輸(SOCK_DGRAM,對應UDP)。
Unix Domain Socket 的通訊基於作業系統核心的,使用檔案系統作為地址名稱空間(address name space)。
2. 簡單的server/client示例(python)
示例分為兩部分,server端, client端
2.1 server端程式碼
import socket
import sys
import os
serverAddr = 'xunixSocket_ex'
def serverSocket():
#create sockert
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
if sock < 0:
print >> sys.stderr, 'socket error'
# bind to a file
if os.path.exists(serverAddr):
os.unlink(serverAddr)
if sock.bind(serverAddr):
print >> sys.stderr, 'socket.bind error'
#listen
if sock.listen(5):
print >> sys.stderr, 'socket.listen error'
while True:
print >> sys.stderr, 'waiting for connecting'
#waiting for client connecting
conn, clientAddr = sock.accept()
try:
# receive data
# send data to client
while True:
data = conn.recv(100)
if data:
print >> sys.stderr, 'received "%s"' %data
conn.sendall(data)
else:
break
finally:
#close the connection
conn.close()
os.unlink(serverAddr)
if __name__ == "__main__":
serverSocket()
2.2 client端程式碼
import socket
import sys
import os
serverAddr = 'xunixSocket_ex'
def clientSocket():
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
if sock < 0:
print >> sys.stderr, 'socket error'
try:
sock.connect(serverAddr)
except socket.error, msg:
print >> sys.stderr, "exception"
print >> sys.stderr, msg
sys.exit(1)
message = 'this is the message'
sock.sendall(message)
amountRecv = 0
amountSnd = len(message)
while amountRecv < amountSnd:
data = sock.recv(100)
amountRecv += len(data)
print >> sys.stderr, 'received "%s"' %data
sock.close()
if __name__ == "__main__":
clientSocket()
注:
這篇博文只是做個備忘錄,後面會用詳細介紹unix域套介面(使用C語言寫程式碼示例)。
相關推薦
unix Domain socket(python)
1. unix Domain Socket 簡介 Unix Domain Socket通常稱為 【unix域套介面】 或 【本地套介面】,它用於位於同一臺機器(作業系統)的程序間通訊。它已經被納入POSIX Operating Systems標準。 它支援以
由一個簡單需求到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
咋一看名字,雖然有個socket,但是它的用場和常說的“網路”socket有所不同。它實際上是一種本地IPC,以socket為名是因為它和普通socket使用的介面是一致的。 雖說普通的socket也可以用作本地IPC,但是從效率上和功能上,要遜於Unix Domain
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
socket unix domain IPC程式碼示例
僅供參考: 服務端:socket->bind->listen->send/recv->close 客戶端:socket->bind->connect->send/recv->close #include <sys/socke
最大視角-從Unix底層 理解 python的io模型、python非同步IO、python的select、Unix的select、epoll
參考連結 最基本的文章 python之路——IO模型 一步步理解python的非同步IO Unix底層文章 Linux-C網路程式設計之select函式 python 的 select linux select函式詳解 unix的select epoll簡介(一) unix的ep
Socket- Python 重構即時聊天系統
Android移動端 - Socket中轉伺服器 - Python服務端 重構即時聊天系統 最近又比較閒,以前畢設即時聊天系統由於環境各種問題,各種也需要優化的問題,又想整合上現在的樹莓派監控系統,所以終於還是決定抽空重構 1.移動端Android_____
Impala cannot read or execute the parent directory of dfs.domain.socket.path
valid short-circuit reads configuration: Impala cannot read or execute the parent directory of dfs.domain.socket.path 解決方法: 1、去HDFS中找到dfs.
unix域socket繫結路徑不建立檔案問題[c語言]
unix域socket繫結地址時,需要指定一個檔案路徑,存在兩種情況: (1)socket自動建立一個bind指定的檔案路徑對應的檔案 (2)不需要建立socket檔案,只需要命名一個全域性名字即可讓客戶端根據此名字進行連線。後者的實現過程與前者的差別是,後者在對地址結構