我的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
任何人都可以告诉我如何得到这个错误以及如何解决它?
答案 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