python套接字对EINTR做了什么?

时间:2011-05-02 14:35:20

标签: python sockets

到目前为止,我的网络代码工作正常,但我有点担心我隐藏在地毯下的东西:

acceptcloseconnectrecvsend的手册页提到系统调用时errno.EINTR可以显示被信号打断了。

我在这里很无能。

python做了什么?它是否会自动重试该调用,它是否会使用该错误引发socket.error?如果引发异常,我该怎么办?我可以在我的单元测试中自己生成这些信号吗?

1 个答案:

答案 0 :(得分:1)

Python只是重试调用并隐藏来自用户的信号(有助于跨平台一致性-EINTR不存在)。您可以安全地忽略EINTR问题,但如果您还想测试它,那么很容易做到。只需设置一个不会返回的阻塞操作(例如没有传入连接的socket.accept)并向进程发送信号。