Могу ли я отсоединить сокет от локальной конечной точки?В целях безопасности мне нужно исправить исходный порт для связи TCP.В этом коде клиента я устанавливаю исходный порт на 42448
:
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
IPEndPoint localEP = new IPEndPoint(IPAddress.Parse("192.168.1.123"), 42448);
s.Bind(localEP);
s.Connect(remoteEP);
s.Send(new byte[] { 0x01, 0x02, 0x03 });
s.Close();
. Он работает только один раз.Во второй раз он выдает SocketException
(этот адрес уже используется) в строке s.Connect
, как я вижу в netstat
, есть одно соединение с этим исходным портом 42448
в состоянии TIME_WAIT
, даже если я закрываюприложение.Примерно через 1 минуту это TIME_WAIT
соединение исчезает, и я могу запустить свой код, но снова только один раз.Как я могу правильно отсоединить этот сокет, чтобы я мог запускать код много раз?
Обновление 1 это не сокет сервера, поэтому здесь нет прослушивания.LingerOption
также не работает:
LingerOption lo = new LingerOption(false, 0);
s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Linger, lo);