我正在使用此处的代码测试UDP打孔。它可以在Linux上运行,但是会在Windows上报告错误。这是发生错误的代码片段:
while True:
rfds, _, _ = select([0, sockfd], [], []) # sockfd is a socket
if 0 in rfds:
data = sys.stdin.readline()
if not data:
break
sockfd.sendto(data, target)
elif sockfd in rfds:
data, addr = sockfd.recvfrom(1024)
sys.stdout.write(data)
Run Code Online (Sandbox Code Playgroud)
和错误消息:
Traceback (most recent call last):
File "udp_punch_client.py", line 64, in <module>
main()
File "udp_punch_client.py", line 50, in main
rfds, _, _ = select([0, sockfd], [], [])
select.error: (10038, '')
Run Code Online (Sandbox Code Playgroud)
我知道此错误与selectWindows 上的实现有关,每个人都引用以下内容:
注意 Windows上的文件对象是不可接受的,但套接字是可接受的。在Windows上,底层的select()函数由WinSock库提供,并且不处理不是源自WinSock的文件描述符。
所以我有两个问题:
0在 …