套接字中没有超时异常

时间:2013-09-08 15:14:38

标签: python sockets

我对套接字非常困惑...我有两个脚本,一个是server.py,第二个是client.py:

server.py

import socket

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('0.0.0.0', 1235))
server.listen(1)

while True:
    client, address = server.accept()

    try:
        client.recv(1024)
    except socket.Timeouterror:
        print 'timeout'

client.py

import socket

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('ip', 1235))

为什么server.py脚本没有显示超时错误?

2 个答案:

答案 0 :(得分:3)

如果你想拥有一个套接字,你需要set the timeout

...
client, address = server.accept()
client.settimeout(10)
...

或者您可以为所有套接字使用default timeout

socket.Timeouterror不存在,应为socket.timeout

此外,您可能应该关闭客户端套接字,否则客户端将不知道连接已关闭。单独的超时不适合你。

答案 1 :(得分:2)

默认情况下,某些套接字调用是阻塞的。如果没有任何反应,它们将无限期地阻止。 recv()就是其中一个调用。其他阻塞调用是accept(),recvfrom(),read()。