8

我实现了一个代码,它以连续的方式向不同的目的地发送 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)

笔记:

  1. self.socket是两个模块的相同对象引用。
  2. self.socket我在执行期间从不关闭或更改。
  3. self.PACKET_SIZE = 32(字节)
4

0 回答 0