Я подозреваю, что вы путаете сокеты подключенных клиентов с сокетом вашего сервера.
Ваш серверный сокет прослушивает входящие соединения через определенный порт. Сокет, который вы закрываете в этой функции, является вашим каналом для одного из (потенциально многих) удаленных подключений.
Чтобы «отсоединить порт», вам нужно выключить / закрыть сервер сокет.
Обновление для устранения путаницы
У вас должен быть «серверный» сокет, для которого вы сделали вызов .Bind (EndPoint), а затем вызов .Listen (). Это сокет, который вы хотите отключить / закрыть, чтобы «отсоединить» и освободить порт для дальнейшего использования.
Затем у вас есть несколько «клиентских» сокетов, на которые вы получаете ссылки всякий раз, когда ваш «серверный» сокет принимает новое соединение. Все они могут быть связаны с одним и тем же портом без проблем. Чтобы закрыть одно из этих соединений и отключить клиента, сделайте то, что вы делаете сейчас. Вы можете урезать метод до:
- Shutdown
- Закрыть
- Удалить из вашего списка
Отключить, а остальные не нужны.