强制sock.accept()引发测试异常

时间:2018-12-25 17:03:22

标签: python-3.x sockets python-asyncio

作为一组测试的一部分,我希望server_sock.accept()引发一个异常(不是BlockingIOError)

server_sock = socket(family=AF_INET, type=SOCK_STREAM, proto=IPPROTO_TCP)
server_sock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
server_sock.setblocking(False)
server_sock.bind(('', 8080))
server_sock.listen(IPPROTO_TCP)

# Would like to raise an exception
server_sock.accept()

我知道我可以用某种方式修补对象以强制它,但是我想模拟尽可能接近真实的情况,因此实际网络/操作系统条件会引发异常,例如通过远程套接字上的某些行为。这可能吗?

1 个答案:

答案 0 :(得分:2)

您应该通过模拟套接字强制它。如果您搜索该代码,则可能会找到示例代码。或者,您可能想知道套接字抛出哪些异常。您可以在github上找到python和C代码。

https://github.com/python/cpython/blob/master/Lib/socket.py

https://github.com/python/cpython/blob/master/Modules/socketmodule.c

如果您想更深入些,请查看accept手册页以查看返回的错误。

http://man7.org/linux/man-pages/man2/accept.2.html

可能是特定于Linux的错误:

  

此外,如果出现以下情况,Linux accept()可能会失败

  EPERM  Firewall rules forbid connection.