我实现了一个代码,它以连续的方式向不同的目的地发送 ping,但是,在 10 小时的执行周期之后,我正在使用的套接字受到某种老化的影响,导致应用程序停止并出现“[Errorno 105] No可用的缓冲空间”。我如何监控和解决这个问题?
仅供参考,一旦打开,我总是使用同一个套接字来发送和接收 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:]
接收方代码
import select
whatReady = select.select([self.socket],[],[])
if whatReady[0] != []:
for skt in whatReady[0]:
#...
(recPacket,addr) = self.socket.recvfrom(self.PACKET_SIZE+64)
笔记:
self.socket
是两个模块的相同对象引用。self.socket
我在执行期间从不关闭或更改。- self.PACKET_SIZE = 32(字节)