【发布时间】:2018-04-05 01:25:48
【问题描述】:
当我使用 python 进行套接字编程时,
我注意到一些操作并没有因中断而停止。例如:accept() 或 recv()
所以我使用小超时来解决这个问题,即每 1 秒,程序停止操作并重新调用。例如,
socket.settimeout(1)
while True:
try:
socket.recv()
except timeout:
# back to socket.recv()
continue
except KeyboardInterrupt:
break
是否存在一些潜在问题,例如在超时异常期间丢失某些消息或操作系统负载过重等?
而且,您有什么更好的办法来停止不使用超时的套接字吗?请告诉我,我很感激你的回答。
还有一件事需要考虑。我在 Windows 中测试了这个程序,并且即使我按下 ctrl+C,在 recv() 完成后 KeyboardInterrupt 实际上也会引发。但是在 MacOS 或 Linux 中,KeyboardInterrupt 会在按下 ctrl+C 后引发。 Windows 和 Linux/Unix 有区别吗?
【问题讨论】: