mirror of
https://github.com/TalAloni/SMBLibrary.git
synced 2025-07-03 08:13:18 +02:00
SMBIServer: Use CancellationToken for send keep-alive thread if available
This commit is contained in:
parent
693269f02f
commit
dd7b945ddc
1 changed files with 19 additions and 1 deletions
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (C) 2014-2021 Tal Aloni <tal.aloni.il@gmail.com>. All rights reserved.
|
/* Copyright (C) 2014-2024 Tal Aloni <tal.aloni.il@gmail.com>. All rights reserved.
|
||||||
*
|
*
|
||||||
* You can redistribute this program and/or modify it under the terms of
|
* You can redistribute this program and/or modify it under the terms of
|
||||||
* the GNU Lesser Public License as published by the Free Software Foundation,
|
* the GNU Lesser Public License as published by the Free Software Foundation,
|
||||||
|
@ -32,6 +32,9 @@ namespace SMBLibrary.Server
|
||||||
|
|
||||||
private ConnectionManager m_connectionManager;
|
private ConnectionManager m_connectionManager;
|
||||||
private Thread m_sendSMBKeepAliveThread;
|
private Thread m_sendSMBKeepAliveThread;
|
||||||
|
#if !NET20
|
||||||
|
private CancellationTokenSource m_sendSMBKeepAliveCancellationTokenSource;
|
||||||
|
#endif
|
||||||
|
|
||||||
private IPAddress m_serverAddress;
|
private IPAddress m_serverAddress;
|
||||||
private SMBTransportType m_transport;
|
private SMBTransportType m_transport;
|
||||||
|
@ -106,11 +109,22 @@ namespace SMBLibrary.Server
|
||||||
|
|
||||||
if (connectionInactivityTimeout.HasValue)
|
if (connectionInactivityTimeout.HasValue)
|
||||||
{
|
{
|
||||||
|
#if !NET20
|
||||||
|
m_sendSMBKeepAliveCancellationTokenSource = new CancellationTokenSource();
|
||||||
|
#endif
|
||||||
m_sendSMBKeepAliveThread = new Thread(delegate()
|
m_sendSMBKeepAliveThread = new Thread(delegate()
|
||||||
{
|
{
|
||||||
while (m_listening)
|
while (m_listening)
|
||||||
{
|
{
|
||||||
|
#if NET20
|
||||||
Thread.Sleep(InactivityMonitoringInterval);
|
Thread.Sleep(InactivityMonitoringInterval);
|
||||||
|
#else
|
||||||
|
bool cancelled = m_sendSMBKeepAliveCancellationTokenSource.Token.WaitHandle.WaitOne(InactivityMonitoringInterval);
|
||||||
|
if (cancelled)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
m_connectionManager.SendSMBKeepAlive(connectionInactivityTimeout.Value);
|
m_connectionManager.SendSMBKeepAlive(connectionInactivityTimeout.Value);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -126,7 +140,11 @@ namespace SMBLibrary.Server
|
||||||
m_listening = false;
|
m_listening = false;
|
||||||
if (m_sendSMBKeepAliveThread != null)
|
if (m_sendSMBKeepAliveThread != null)
|
||||||
{
|
{
|
||||||
|
#if NET20
|
||||||
m_sendSMBKeepAliveThread.Abort();
|
m_sendSMBKeepAliveThread.Abort();
|
||||||
|
#else
|
||||||
|
m_sendSMBKeepAliveCancellationTokenSource?.Cancel();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
SocketUtils.ReleaseSocket(m_listenerSocket);
|
SocketUtils.ReleaseSocket(m_listenerSocket);
|
||||||
m_connectionManager.ReleaseAllConnections();
|
m_connectionManager.ReleaseAllConnections();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue