2020-03-24 07:42:14 -04:00
|
|
|
function New-IcingaTCPSocket()
|
|
|
|
|
{
|
2021-08-04 04:04:15 -04:00
|
|
|
param (
|
|
|
|
|
[string]$Address = '',
|
|
|
|
|
[int]$Port = 0,
|
|
|
|
|
[switch]$Start = $FALSE
|
2020-03-24 07:42:14 -04:00
|
|
|
);
|
|
|
|
|
|
|
|
|
|
if ($Port -eq 0) {
|
|
|
|
|
throw 'Please specify a valid port to open a TCP socket for';
|
|
|
|
|
}
|
|
|
|
|
|
2021-08-04 04:04:15 -04:00
|
|
|
# Listen on localhost by default
|
|
|
|
|
$ListenAddress = New-Object System.Net.IPEndPoint([IPAddress]::Loopback, $Port);
|
|
|
|
|
|
|
|
|
|
if ([string]::IsNullOrEmpty($Address) -eq $FALSE) {
|
|
|
|
|
$ListenAddress = New-Object System.Net.IPEndPoint([IPAddress]::Parse($Address), $Port);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$TCPSocket = New-Object 'System.Net.Sockets.TcpListener' $ListenAddress;
|
2020-03-24 07:42:14 -04:00
|
|
|
|
2020-03-24 10:32:14 -04:00
|
|
|
Write-IcingaDebugMessage -Message (
|
|
|
|
|
[string]::Format(
|
|
|
|
|
'Creating new TCP socket on Port {0}. Endpoint configuration {1}',
|
|
|
|
|
$Port,
|
|
|
|
|
$TCPSocket.LocalEndpoint
|
|
|
|
|
)
|
|
|
|
|
);
|
|
|
|
|
|
2020-03-24 07:42:14 -04:00
|
|
|
if ($Start) {
|
2020-03-24 10:32:14 -04:00
|
|
|
Write-IcingaDebugMessage -Message (
|
|
|
|
|
[string]::Format(
|
|
|
|
|
'Starting TCP socket for endpoint {0}',
|
|
|
|
|
$TCPSocket.LocalEndpoint
|
|
|
|
|
)
|
|
|
|
|
);
|
2020-03-24 07:42:14 -04:00
|
|
|
$TCPSocket.Start();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $TCPSocket;
|
|
|
|
|
}
|