2015-06-16 69 views
2

Python中AF_UNIX套接字的「客戶端地址」是什麼意思?如何識別連接到AF_UNIX插座的客戶端?

sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) 
sock.bind("/tmp/sock") 
sock.listen(1) 
while True: 
    connection, client_address = sock.accept() 
    print(client_address) # prints : b'' 

有沒有辦法在服務器端獲取有關連接客戶端的任何信息?

回答

2

對於UNIX套接字; socket.acept()將返回socket,()。即:一個空元組。

例如,您可以通過查看socket.fileno()來獲得有關「客戶端」套接字的一些信息。

例如與修改echoserverunix.py

$ python examples/echoserverunix.py 
<registered[*] (<Debugger/* 19377:MainThread (queued=0) [S]>, <EchoServer/server 19377:MainThread (queued=2) [R]>)> 
<started[server] (<EchoServer/server 19377:MainThread (queued=1) [R]>)> 
<registered[select] (<Select/select 19377:MainThread (queued=0) [S]>, <EchoServer/server 19377:MainThread (queued=2) [R]>)> 
<ready[server] (<EchoServer/server 19377:MainThread (queued=1) [R]>, ('/tmp/test.sock', None))> 
<_read[server] (<socket._socketobject object at 0x7fa4c0b8a210>)> 
<connect[server] (<socket._socketobject object at 0x7fa4c0b8a1a0>)> 
<socket._socketobject object at 0x7fa4c0b8a1a0> 
6 
() 

按照accept()手冊頁hwoever:

返回值

成功時,這些系統調用返回一個非負整數,它是接受的套接字的描述符爲 。出錯時,返回-1,並適當設置 errno。

因此,在C級別,您將獲取Python創建socket對象的「文件描述符」。但是,除了文件描述符以外,沒有客戶端連接的對等地址或路徑。