作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
Windows 套接字在涉及 WSAECONNREFUSED 时有一些奇怪的行为(这意味着积压已满或端口不可用,请参阅 https://stackoverflow.com/a/10308338/851737)。如果 Windows 检测到其中一种情况,它会重试(最多)两次,间隔为 0.5 秒。这意味着在套接字连接尝试 (http://support.microsoft.com/kb/175523/en-us) 上检测 WSAECONNREFUSED 至少需要 1 秒。
有没有什么方法可以在不扰乱注册表值的情况下加快检测速度?我需要在单元测试中模拟拒绝套接字连接。像使用原始套接字模拟拒绝连接这样的解决方法也是可以接受的。
这是一个简单的 Python 脚本来演示这个问题:
import errno
import socket
import time
PORT = 50123
def main():
s = socket.socket()
s.bind(('127.0.0.1', PORT))
s.listen(0)
client = socket.socket()
client.connect(('127.0.0.1', PORT))
client2 = socket.socket()
start = time.time()
try:
client2.connect(('127.0.0.1', PORT))
except socket.error as e:
assert e.errno == errno.WSAECONNREFUSED
print 'connection attempt took', time.time() - start
finally:
client2.close()
client.close()
s.close()
if __name__ == '__main__':
main()
最佳答案
这不是你问的。但是如果你只在unittests 中需要这个,mock图书馆会很有用。
import errno
import socket
import time
import mock
PORT = 50123
def connect_mock(*agrs):
raise socket.error(errno.WSAECONNREFUSED, "Testing")
def main():
s = socket.socket()
s.bind(('127.0.0.1', PORT))
s.listen(0)
client = socket.socket()
client.connect(('127.0.0.1', PORT))
client2 = socket.socket()
start = time.time()
with mock.patch('socket.socket.connect', connect_mock):
try:
client2.connect(('127.0.0.1', PORT))
print "done"
except socket.error as e:
assert e.errno == errno.WSAECONNREFUSED
print 'connection attempt took', time.time() - start
finally:
client2.close()
client.close()
s.close()
if __name__ == '__main__':
main()
关于python - 快速检测或模拟 WSAECONNREFUSED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21167888/
Windows 套接字在涉及 WSAECONNREFUSED 时有一些奇怪的行为(这意味着积压已满或端口不可用,请参阅 https://stackoverflow.com/a/10308338/851
我正在尝试使用 Connect api 连接到设备。它给我 WSAECONNREFUSED 错误。当我连接了两个设备并尝试连接到其中一个设备时,就会发生这种情况。如果我只连接一台设备,那么 conne
我是一名优秀的程序员,十分优秀!