2016-04-14 106 views
0

我想监视一个SMB连接,我已经编写了下面的代码,但是我担心我可能会绑定网络。可以重复SMB套接字连接

以这种方式重复打开和关闭连接可以吗?

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() 

回答

1

打开和关闭这样的连接,每秒一次即使通过拨号也会产生微不足道的流量。即使你完全消除了循环中的延迟,它对现代网络的影响也会很小,可能不会引人注目。 Python的相对较慢的速度以及启动TCP连接所固有的延迟意味着即使您尝试过,您也无法通过重复打开和关闭一个连接来接近网络。