2015-06-16 44 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对象的“文件描述符”。但是,除了文件描述符以外,没有客户端连接的对等地址或路径。