博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Errno 9: Bad file descriptor in python socket错误处理
阅读量:5937 次
发布时间:2019-06-19

本文共 1228 字,大约阅读时间需要 4 分钟。

   写了一个循环检测端口的程序,循环的次数多了,会报Errno 9: Bad file descriptor in python socket错误。程序如下:

def Scan_port(host,port):    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)    #socket.setdefaulttimeout(10)    s.settimeout(10)    t = 1    while 1:        try:            s.connect((host,port))            s.close()            break        except socket.error, e:            s.close()            if t > 3:                print e                break            else:                t = t + 1                time.sleep(1)

   socket连接超时时间为10s,超时之后重试3次,3次依然连接不到或是超时,则抛错。这个函数加入到多线程,多个主机时就会报Errno 9: Bad file descriptor in python socket错误。查找了材料,都说是s.close()在循环里面是主线问题的主要原因,不管s.close()在循环中的那个位置都会出现这个错误。后修改了这段代码如下:

def Scan_port(host,port):    t = 1    while 1:        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)        #socket.setdefaulttimeout(10)        s.settimeout(10)            try:                s.connect((host,port))                s.close()                break            except socket.error, e:                s.close()                if t > 3:                    print e                    break                else:                    t = t + 1                    time.sleep(1)

   把初始化socket提进循环中,经测试2000台服务器的端口不在出错,运行测试了一天没有问题。

转载地址:http://sgptx.baihongyu.com/

你可能感兴趣的文章
Cross-compilation using Clang
查看>>
营销系统--手动补偿
查看>>
图标字体设计
查看>>
【转】Principles of training multi-layer neural network using backpropagation
查看>>
并查集hdu1232
查看>>
改动Androidproject的名称(非Eclipse重命名)
查看>>
tomcat work目录的作用就是编译每个项目里的jsp文件为java文件如果项目没有jsp页面则这个项目文件夹为空...
查看>>
dedecms后台左侧菜单500错误怎么处理
查看>>
Maven配置将war包部署到Tomcat(tomcat7-maven-plugin)
查看>>
Spring MVC学习-------------訪问到静态的文件
查看>>
Unity应用架构设计(11)——一个网络层的构建
查看>>
运行自己的shell脚本
查看>>
内存错误的类别
查看>>
Authentication 方案优化探索(JWT, Session, Refresh Token, etc.)
查看>>
Struts2 关于返回type="chain"的用法.
查看>>
Maven私服安装及配置——(十二)
查看>>
设计模式 - 迭代器模式(iterator pattern) 具体解释
查看>>
Codeforces554B:Ohana Cleans Up
查看>>
【java】jvm查看当前虚拟机堆大小限制
查看>>
python写入excel(xlswriter)--生成图表
查看>>