継続的にさまざまな宛先に 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 (バイト)