确定是否可以读取或使用套接字

时间:2013-11-29 18:24:56

标签: python sockets

有没有办法确定是否仍然可以读取套接字?我试过isinstance和type但是它们的类型是相同的,即使一个已经关闭而另一个是活动的,所以我试图找出如何查看套接字是否存活且可以读取或使用或不能所以我可以避免这个错误:OSError: [WinError 10038] An operation was attempted on something that is not a socket

2 个答案:

答案 0 :(得分:1)

根据你的评论,统治者,我想我知道你在做什么。

您想要做的是在数据流到达结束时中断while循环然后在完成说完之后关闭套接字。在过去,我完成了以下内容:

while 1:
    data = conn.recv(1024)
    if not data: break
    conn.send(data)
conn.close()

只要数据流进入(基于if循环),while循环就会保持不变。否则,它将突破循环,最后关闭套接字。通过这种方式,您甚至不必担心您的套接字在中间循环中关闭...只需检查您的流并在收到所有数据后关闭它。希望这有帮助。

答案 1 :(得分:0)

在Windows上,您可以通过使用python netstat运行subprocess module命令然后解析输出来完成此操作。

import subprocess
output, error = subprocess.Popen(['netstat','-n'],stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()

# then parse the port numbers / states out of the variable *output*