对于 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''
有没有办法在服务器端获取有关已连接客户端的任何信息?
对于 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()
手册页:
Return Value
On success, these system calls return a nonnegative integer that is a descriptor for the accepted socket. On error, -1 is returned, and errno is set appropriately.
因此,在 C 级别,您取回了“文件描述符”,Python 从中创建了一个 socket
对象。但是除了文件描述符之外,没有客户端连接的对等地址或路径。
我是一名优秀的程序员,十分优秀!