我实现了一个代码,以连续的方式将ping发送到不同的目的地,但是,经过10个小时的执行周期后,我正在使用的套接字受到某种老化的影响,使得应用程序停止时出现"[Errorno 105]否缓冲空间可用".我该如何监控并解决这个问题?
仅供参考,一旦打开,我总是使用相同的套接字来发送和接收ping:可以定期更换套接字来解决问题吗?
import socket
icmp = socket.getprotobyname('icmp')
self.socket = socket.socket(socket.AF_INET,socket.SOCK_RAW,icmp)
for target in target_list:
#...
packet = header+data
while packet:
sent = self.socket.sendto(packet,(target, 1))
packet = packet[sent:]
Run Code Online (Sandbox Code Playgroud)
import select
whatReady = select.select([self.socket],[],[])
if whatReady[0] != []:
for skt in whatReady[0]:
#...
(recPacket,addr) = self.socket.recvfrom(self.PACKET_SIZE+64)
Run Code Online (Sandbox Code Playgroud)
笔记:
self.socket 是两个模块的相同对象引用. self.socket在执行期间从不关闭或改变.我需要实现一个能够每秒向一定数量的目的地发送ping数据包的代码。问题是我想在1秒窗口内ping尽可能多的目的地。出于这个原因,我在考虑是否有一种方法可以将循环强加到nmap中[我的意思是-cycle nmap参数],这样套接字只能打开一次并在循环ping结束时关闭,这比使用a节省了更多时间“观看nmap”方法!