2016-04-14 17 views
0

Ich möchte eine SMB-Verbindung überwachen, ich habe den Code unten gekocht, aber ich bin besorgt, dass ich das Netzwerk binden kann.Ist es in Ordnung, wiederholte SMB-Socket-Verbindungen

Ist es in Ordnung, eine Verbindung auf diese Weise wiederholt zu öffnen und zu schließen?

import socket 
import time 
import threading 

class SMBConnectionMonitor(threading.Thread): 
    def __init__(self, host, poll_period=60, timeout=5): 
     super(SMBConnectionMonitor, self).__init__() 

     self.host = host 
     self.poll_period = poll_period 
     self.timeout = timeout 
     self.connected = False 
     self.stop_requested = False 

    def stop(self): 
     self.stop_requested = True 

    def run(self): 
     while not self.stop_requested: 
      sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
      sock.settimeout(self.timeout) 
      try: 
       sock.connect((self.host, 445)) 
       # successful, if this is the first time update the status 
       if not self.connected: 
        self.connected = True 
      except socket.error as e: 
       # can't connect, if this is first time update the status 
       if self.connected: 
        self.connected = False 
      sock.close() 

      # wait for the poll period before trying another connection 
      for i in range(self.poll_period): 
       if self.stop_requested: return 
       time.sleep(1) 

monitor = SMBConnectionMonitor("remote-computer", poll_period=10) 
monitor.start() 
monitor.join(timeout=30) 
monitor.stop() 

Antwort

1

Öffnen und Schließen einer Verbindung wie diese einmal pro Sekunde würde vernachlässigbar Verkehr erzeugen auch über Dial-up. Selbst wenn Sie die Verzögerung vollständig aus der Schleife entfernen würden, hätte dies eine sehr kleine, wahrscheinlich nicht einmal spürbare Auswirkung auf ein modernes Netzwerk. Die relativ langsame Geschwindigkeit von Python kombiniert mit den Verzögerungen, die mit dem Starten einer TCP-Verbindung verbunden sind, bedeutet, dass Sie selbst dann, wenn Sie es versuchen, nicht annähernd das Netzwerk durch wiederholtes Öffnen und Schließen einer Verbindung binden können.