gpt4 book ai didi

python - zmq.error.ZMQError : Socket operation on non-socket: How to find alive sockets before closing? 错误

转载 作者:太空宇宙 更新时间:2023-11-04 05:02:41 25 4
gpt4 key购买 nike

在我的应用程序中,我正在创建 2 个套接字并进行尝试/除此之外:

try:
socketA.connect("tcp://localhost:5557")
socketB.bind("tcp://localhost:5558")
except zmq.ZMQError as e:

if e.errno == zmq.EINVAL:
logger.error("Endpoint supplied is invalid")
else:
logger.error("The ZeroMQ error with an error number {0}".format(e.errno))
raise ZMQError(e)
cleanUp()

如果由于某种原因,其中一个套接字不能.connect()/.bind() ,我想关闭两个套接字并终止 cleanUp() 中的上下文函数,但是在关闭它们之前我如何知道哪些套接字处于事件状态?

ZeroMQ 是否在正常关闭套接字之前提供有关事件套接字的任何信息?

最佳答案

鉴于上面的逻辑,让我们使用另一种方法:

案例 A:两个套接字分别执行 .connect() + .bind()
案例 B:任何套接字都失败了。

 try:
socketA.connect( "tcp://localhost:5557" )
socketA.setsockopt( zmq.LINGER, 0 )
try:
socketB.bind( "tcp://localhost:5558" )
socketB.setsockopt( zmq.LINGER, 0 )

except zmq.ZMQError as e:

if ( e.errno in ( zmq.EINVAL,
zmq.EPROTONOSUPPORT,
zmq.ENOCOMPATPROTO,
zmq.EADDRINUSE,
zmq.EADDRNOTAVAIL,
)
):
logger.error( "ZeroMQ TransportClass / Endpoint cannot be setup for [socketB]." )

if ( e.errno in ( zmq.ENODEV,
zmq.ENOTSOCK,
)
):
logger.error( "ZeroMQ request was made against a non-existent device or not using a valid socket [socketB]." )

if ( e.errno in ( zmq.ETERM,
zmq.EMTHREAD,
)
):
logger.error( "ZeroMQ Context is not in a state to handle this request for [socketB]." )


cleanUp( aContextINSTANCE, [ socketA, socketB, ] )

except zmq.ZMQError as e:

if ( e.errno in ( zmq.EINVAL,
zmq.EPROTONOSUPPORT,
zmq.ENOCOMPATPROTO,
)
):
logger.error( "ZeroMQ TransportClass / Endpoint cannot be setup for [socketA]." )

if ( e.errno in ( zmq.ETERM,
zmq.EMTHREAD,
)
):
logger.error( "ZeroMQ Context is not ready to handle this request for [socketA]." )

if ( e.errno in ( zmq.ENOTSOCK, ) ):
logger.error( "ZeroMQ operation was requested, but not on a valid [socketA]." )

cleanUp( aContextINSTANCE, [ socketA, ] )

finally:
# ...
pass

def cleanUp( aContextToTERMINATE, aListOfSocketsToCLOSE = [] ):
for aSocket in aListOfSocketsToCLOSE:
try:
aSocket.close() # external responsibility to setup LINGER as zero right at aSocket instantiation point
except:
pass
try:
aContextToTERMINATE.term()
except:
pass
finally:
# ...
pass

关于python - zmq.error.ZMQError : Socket operation on non-socket: How to find alive sockets before closing? 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45361420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com