ZeroMQ:如何找到PAIR套接字使用哪个端口?

问题描述:

有没有办法看到连接后ZeroMQ(实际上是pyzmq)端口连接到哪个端口?
例如...ZeroMQ:如何找到PAIR套接字使用哪个端口?

import zmq 
context = zmq.Context() 
socket = context.socket(zmq.PAIR) 
port = socket.bind_to_random_port("tcp://*") 
# some other code that might change that binding 
actual_port = socket.which_port???() # (this is what I want) 

不能在文件或其他论坛上找到。会帮我节省一些调试时间!

```

+1

你可以用'sock.get(zmq.FD)'得到底层的FD,然后使用标准的'getsockname'和'getpeername'函数? – o11c

+0

@ o11c这听起来像一个很好的方向,但我仍然不知道如何做到这一点? 'pyzmq'似乎缺少'getsockname',它会告诉端口,或者我无法找到它? –

+0

“标准”,我的意思是它在'套接字'模块。你必须首先调用'socket.fromfd'来得到一个(内部'dup''ed,所以你不必担心它会在你之下关闭)'socket'对象,这需要传递这个家族(AF_INET '或'AF_INET6' - 不知道默认的zmq是什么)并键入('SOCK_STREAM'为'tcp://')。 – o11c

.bind_to_random_port()方法会自动选择一个端口绑定到与返回将包含它绑定过的端口。回报是int