如何识别连接到AF_UNIX套接字的客户端?

时间:2015-06-16 23:55:45

标签: python sockets

Python中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''

有没有办法在服务器端获取有关已连接客户端的任何信息?

1 个答案:

答案 0 :(得分: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:

  

返回值

     

成功时,这些系统调用返回一个非负整数,即a   接受套接字的描述符。出错时,返回-1,并且   errno设置得恰当。

所以在C级你会得到&#34;文件描述符&#34;哪个Python创建了一个socket对象。但是没有客户端连接的对等地址或路径,而不是文件描述符。