2015-11-12 6 views
3

Чтобы лучше понять, как работает сетевая часть .NET, я перехожу через исходный источник класса TcpListener (, Reference Source). Меня привлекло то, что ему принадлежит объект, реализующий IDisposable (Socket), но не реализующий IDisposable. Для этого есть причина?Почему TcpListener не реализует IDisposable

+0

ИМО, нет такой причины. Просто отказ разработчика. – Dennis

+2

TcpListener - это вспомогательный класс, который упрощает реализацию TCP-сервера. IDisposable никогда не делал ничего легкого. Не утилизировать сокет - это * не * серьезная проблема, он использует очень мало системных ресурсов. Его финализатор может отлично справиться с этой задачей. Тем более, что в простом сценарии, где TcpListener подходит, такая программа, которая создает слушателя только один раз и заставляет его жить в течение всего процесса. Особенность, а не ошибка. –

+0

@HansPassant: отказ от размещения сокета может привести к чрезмерному потреблению ресурсов на любом удаленном компьютере, на котором размещается сокет. Если этот дальний компьютер представляет собой небольшой встроенный микропроцессор, его полезность может сильно ухудшиться до тех пор, пока не закончится финализатор или не истечет время его сетевого сокета. – supercat

ответ

0

Потому что, когда вы используете IPEndPoint на основе constructor, TcpListener не имеет гнезда. Было бы очень грубо распоряжаться упомянутой розеткой, если вы планировали повторное использование указанного объекта IPEndPoint

Смежные вопросы