Errno 9: Bad file descriptor in python socket错误处理

简介:

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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()在循环中的那个位置都会出现这个错误。后修改了这段代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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台服务器的端口不在出错,运行测试了一天没有问题。



本文转自 lover00751CTO博客,原文链接:http://blog.51cto.com/wangwei007/1231121,如需转载请自行联系原作者

相关文章
|
8天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
8天前
|
程序员 开发者 Python
Python网络编程基础(Socket编程) 错误处理和异常处理的最佳实践
【4月更文挑战第11天】在网络编程中,错误处理和异常管理不仅是为了程序的健壮性,也是为了提供清晰的用户反馈以及优雅的故障恢复。在前面的章节中,我们讨论了如何使用`try-except`语句来处理网络错误。现在,我们将深入探讨错误处理和异常处理的最佳实践。
|
2月前
|
网络协议 安全 开发者
Python 中的 Socket 编程
Python 中的 Socket 编程
44 4
|
3月前
|
网络协议 程序员 Python
揭秘Python网络编程:深入理解Socket通信
在当今信息时代,网络通信已经成为人们生活中不可或缺的一部分。而Python作为一种高效、易用的编程语言,自然也能够很好地支持网络编程和Socket通信。本文将介绍Python网络编程与Socket通信的相关知识,包括Socket通信模型、Socket编程接口、网络套接字等内容。
|
3月前
|
网络协议 开发者 Python
Python网络编程与Socket通信:连接世界的无限可能
在当今数字化时代,Python作为一种强大的编程语言,通过网络编程与Socket通信为我们打开了连接世界的无限可能。本文将深入探讨Python网络编程的基础知识、Socket通信的原理以及实际应用,帮助读者更好地理解并运用这一技术。
|
4月前
|
Python
python socket 编程实现猜数字
python socket 编程实现猜数字
30 0
|
3月前
|
数据处理 Python
Python 的网络编程:什么是 Socket 编程?在 Python 中如何实现 Socket 编程?
Python 的网络编程:什么是 Socket 编程?在 Python 中如何实现 Socket 编程?
|
7天前
|
网络协议 Java API
Python网络编程基础(Socket编程)Twisted框架简介
【4月更文挑战第12天】在网络编程的实践中,除了使用基本的Socket API之外,还有许多高级的网络编程库可以帮助我们更高效地构建复杂和健壮的网络应用。这些库通常提供了异步IO、事件驱动、协议实现等高级功能,使得开发者能够专注于业务逻辑的实现,而不用过多关注底层的网络细节。
|
11天前
|
Python
Python网络编程基础(Socket编程)UDP服务器编程
【4月更文挑战第8天】Python UDP服务器编程使用socket库创建UDP套接字,绑定到特定地址(如localhost:8000),通过`recvfrom`接收客户端数据报,显示数据长度、地址和内容。无连接的UDP协议使得服务器无法主动发送数据,通常需应用层实现请求-响应机制。当完成时,用`close`关闭套接字。
|
1月前
|
安全 网络协议 网络安全
Python中的Socket编程
Python中的Socket编程
31 0