可以重复进行SMB套接字连接

时间:2016-04-14 19:12:47

标签: python sockets 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 个答案:

答案 0 :(得分:1)

即使通过拨号,每秒打开和关闭一次这样的连接也会产生微不足道的流量。即使您完全从循环中删除了延迟,它对现代网络的影响也会非常小,甚至可能不明显。相对较慢的Python速度加上启动TCP连接所固有的延迟意味着即使您尝试过,也无法通过反复打开和关闭一个连接来接近网络。