首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在nanomsg python中设置套接字超时

在nanomsg python中设置套接字超时
EN

Stack Overflow用户
提问于 2018-01-15 12:46:23
回答 2查看 645关注 0票数 1

我在推拉模式中正确设置nanomsg python的超时时遇到了问题。我使用set套接字选项函数并传入一个ctype对象。两个set_sock_options都返回成功。我是不是遗漏了什么?

套接字工作以接收和发送,但有一个无限的超时。当我使用get_sock_option时,它会返回我刚刚设置的值,因此我的输入似乎有某种效果。

代码语言:javascript
复制
NN_RCVTIMEO = 5
NN_SNDTIMEO = 4
NN_SOL_SOCKET = 0

message = ""

timeout = ctypes.create_string_buffer(b'500');

#Bind input socket
socket_in = nn_wrapper.nn_socket(AF_SP, PULL)
sucess = nn_wrapper.nn_setsockopt(socket_in, NN_SOL_SOCKET, NN_RCVTIMEO, timeout)
nn_wrapper.nn_bind(socket_in, 'tcp://127.0.0.1:64411')
time.sleep(0.2)

print("SUCESS?" + str(sucess))


#Send inquiry
socket_out = nn_wrapper.nn_socket(AF_SP, PUSH)
sucess = nn_wrapper.nn_setsockopt(socket_out, NN_SOL_SOCKET, NN_SNDTIMEO, timeout)
nn_wrapper.nn_connect(socket_out, 'tcp://127.0.0.1:64400')
time.sleep(0.2)

print("SUCESS?" + str(sucess))

nn_wrapper.nn_send(socket_out, b'HELLO',0)

#Received...
bytes, message = nn_wrapper.nn_recv(socket_in, 0)

nn_wrapper.nn_close(socket_in)
nn_wrapper.nn_close(socket_out)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-17 13:27:12

在使用通过引用接受参数的C函数包装器(在本例中是整数)时,您必须使用'struct‘模块。这就是如何将整数值nn_setsockopt() 500用作函数的参数:

代码语言:javascript
复制
from struct import Struct
from nanomsg import wrapper as nn_wrapper
from nanomsg import Socket, PULL, PUSH, AF_SP
import ctypes

NN_RCVTIMEO = 5
NN_SOL_SOCKET = 0

INT_PACKER = Struct(str('i'))
timeout = (ctypes.c_ubyte * INT_PACKER.size)()
INT_PACKER.pack_into(timeout, 0, 500)

socket_in = nn_wrapper.nn_socket(AF_SP, PULL)
nn_wrapper.nn_bind(socket_in, 'tcp:///127.0.0.1:60000')
nn_wrapper.nn_setsockopt(socket_in, NN_SOL_SOCKET, NN_RCVTIMEO, timeout)
票数 1
EN

Stack Overflow用户

发布于 2019-05-25 11:26:38

晚到派对,希望能帮下一个人.

库的编写者已经考虑到了这些问题,并为socket对象提供了一个set_int_option python。

这对我起了作用:

代码语言:javascript
复制
import nanomsg


class ManagementClient:
    def __init__(self, endpoint):
        self._client_socket = nanomsg.Socket(nanomsg.REQ)
        self._client_socket.set_int_option(nanomsg.SOL_SOCKET, nanomsg.RCVTIMEO, 5 * 1000)
        self._client_socket.connect("tcp://" + endpoint)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48263334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档