作为一组测试的一部分,我希望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()
我知道我可以用某种方式修补对象以强制它,但是我想模拟尽可能接近真实的情况,因此实际网络/操作系统条件会引发异常,例如通过远程套接字上的某些行为。这可能吗?
答案 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.