为什么会出现文件描述符错误?

2024-06-17 15:23:10 发布

您现在位置:Python中文网/ 问答频道 /正文

对于我所做的udp服务器程序,此代码的错误文件描述符出现错误

from socket import *

s = socket(AF_INET, SOCK_DGRAM)
s.bind(('', 890))

while True:
   (c,a) = s.recvfrom(1024)
   msg = 'thanks for requesting'
   s.sendto(msg,a)
   s.close()

我收到的错误信息是

Traceback (most recent call last):
File "udpserv.py", line 7, in <module>
(c,a) = s.recvfrom(1024)
 File "/usr/lib/python2.7/socket.py", line 174, in _dummy
raise error(EBADF, 'Bad file descriptor')
socket.error: [Errno 9] Bad file descriptor

有人能告诉我我是怎么得到这个错误的,以及如何解决它吗?


Tags: 代码inpy错误linemsgerrorsocket
2条回答

如果有一个无限while循环,则可以得到相同的错误。在我的情况下,我替换了

while True:

count = 0
while (count < 10):
    count += 1
    #rest of the code

出现此错误是因为您close套接字,然后再次调用recvfrom

如果在带有recvfrom的行后添加print,您将注意到对recvfrom的第一个调用按预期工作。第二个调用(循环一次后)抛出您看到的错误。

只需删除s.close()即可修复代码。(您不需要关闭到客户机的连接,因为UDP没有这个概念,如果您有这个概念的话,则与TCP相反。)

相关问题 更多 >