是否可以进行重复的 SMB 套接字连接

Is it ok to make repeated SMB socket connections

我想监控 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()

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