为什么我会收到错误的文件描述符错误?

时间:2016-05-01 11:57:08

标签: python python-2.7 sockets 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()

我得到的错误信息是

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

任何人都可以告诉我如何得到这个错误以及如何解决它?

2 个答案:

答案 0 :(得分:4)

您收到此错误是因为您#include <iostream> #include <stdlib.h> int main() { int *a = (int *) malloc(sizeof(int)); *a = 5; std::cout << *a << std::endl; for(int i = 0; i < 10000000000000000; ++i) { int *c = (int *) malloc(1024); // 1kb per iteration *c = 5; std::cout << *c << std::endl; } } 套接字,然后再次致电close

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

只需删除recvfrom即可修复您的代码。 (您不需要关闭与客户端的连接,因为UDP没有这个概念,与TCP相比,如果您考虑到这一点。)

答案 1 :(得分:0)

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

while True:

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