python setsockopt什么是工作

2024-09-26 17:55:42 发布

您现在位置:Python中文网/ 问答频道 /正文

那条准则有什么错:

def iec104(dst):
     sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     time = struct.pack('ii', int(2), 0)
     sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVTIMEO, time)

try:
    sock.connect(dst)
except:
    return '', -1


dst = (ip, 2404)
recv, asdu_addr = iec104(dst)
print "ip: {0}, recv: {1}, asdu_addr: {2}".format(ip, 
recv.encode('hex'), asdu_addr)

错误:

^{pr2}$

socket.SO_RCVTIMEO”中是否有错误。 是一种服务器,它不会停止并超时 谢谢


Tags: ipsotimedef错误socketdstsock
2条回答

萨姆·哈特曼的建议是正确的。要做到这一点,最简单的方法是

import sys, socket, struct
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
if sys.maxsize > 2**32:
  time = struct.pack(str("ll"), int(2), int(0))
else:
  time = struct.pack(str("ii"), int(2), int(0))
sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVTIMEO, time)

注意这不是万无一失的。sys.maxsize如果混合了体系结构(64位操作系统上的32位python等),则可能会报告错误。在

Struct timeval在64位linux上为16位。更一般地说,我认为至少在大多数64位平台上,您应该在struct调用中使用64位整数。 很难看,这是架构和操作系统依赖的。 那就试试吧 结构包('ll',整数(2),整数(0))

相关问题 更多 >

    热门问题