是否可以进行重复的 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 连接所固有的延迟意味着即使您尝试过,也无法通过反复打开和关闭一个连接来接近捆绑网络。
我想监控 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 连接所固有的延迟意味着即使您尝试过,也无法通过反复打开和关闭一个连接来接近捆绑网络。