为什么我得到一个错误的文件描述符错误?

Rav*_*thy 4 python sockets python-2.7 server

我为我制作的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()
Run Code Online (Sandbox Code Playgroud)

我收到的错误消息是

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
Run Code Online (Sandbox Code Playgroud)

谁能告诉我我怎么得到这个错误以及如何解决呢?

fue*_*zig 5

您收到此错误的原因是您使用close了套接字,然后recvfrom再次调用。

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

只需删除即可修复代码s.close()。(您不必关闭与客户端的连接,因为UDP没有这个概念,与TCP相反,请记住这一点。)