Чтобы лучше понять, как работает сетевая часть .NET, я перехожу через исходный источник класса TcpListener (, Reference Source). Меня привлекло то, что ему принадлежит объект, реализующий IDisposable (Socket), но не реализующий IDisposable. Для этого есть причина?Почему TcpListener не реализует IDisposable
3
A
ответ
0
Потому что, когда вы используете IPEndPoint
на основе constructor, TcpListener
не имеет гнезда. Было бы очень грубо распоряжаться упомянутой розеткой, если вы планировали повторное использование указанного объекта IPEndPoint
Смежные вопросы
- 1. Почему Enumerable.Range реализует IDisposable?
- 2. Почему System.Net.Mail.MailMessage реализует IDisposable
- 3. Почему класс Stream реализует IDisposable?
- 4. Почему WaitHandle реализует IDisposable явно?
- 5. ClientBase не реализует IDisposable member
- 6. Почему класс реализует IDisposable явно, а не неявно?
- 7. Реализация IDisposable в подклассе, когда родитель также реализует IDisposable
- 8. Почему DomainContext из служб WCF RIA реализует шаблон IDisposable?
- 9. System.ServiceModel.ServiceHost реализует IDisposable, но Dispose не является общедоступным
- 10. Класс, который реализует IDisposable без функции Dispose?
- 11. .NET CF 2.0: Stream реализует IDisposable ... вроде?
- 12. ли Asp.net MVC ActionResult реализует IDisposable
- 13. Почему реализация Thread IDisposable не используется?
- 14. Почему C# System.Threading.Semaphore реализует IDisposable и почему не работает java.util.concurrent.Semaphore Closeable?
- 15. PetaPoco.Database реализует IDisposable, поэтому почему большинство примеров не имеют инструкции 'using'?
- 16. Почему Int не реализует «моноид»?
- 17. Почему AbstractCollection не реализует equals()?
- 18. Почему java.util.List не реализует Serializable?
- 19. Почему java.io.File не реализует Autocloseable?
- 20. Почему не WhereSelectArrayIterator реализует ICollection?
- 21. Почему java.util.BitSet не реализует java.util.Set
- 22. Почему DataContractSerializer не реализует IFormatter?
- 23. Почему AtomicUsize не реализует Send?
- 24. Почему ObservableCollection не реализует IList?
- 25. В каком классе «принадлежит» неуправляемый ресурс (и который реализует IDisposable)?
- 26. Простой инжектор - ApplicationSignInManager зарегистрирован как переходный, но реализует IDisposable
- 27. Почему CancellationTokenRegistration существует и почему это реализовать IDisposable
- 28. Почему IDisposable мгновенно вызывает Dispose()?
- 29. TcpListener не принимает клиента
- 30. TcpListener не подтверждает подключения
ИМО, нет такой причины. Просто отказ разработчика. – Dennis
TcpListener - это вспомогательный класс, который упрощает реализацию TCP-сервера. IDisposable никогда не делал ничего легкого. Не утилизировать сокет - это * не * серьезная проблема, он использует очень мало системных ресурсов. Его финализатор может отлично справиться с этой задачей. Тем более, что в простом сценарии, где TcpListener подходит, такая программа, которая создает слушателя только один раз и заставляет его жить в течение всего процесса. Особенность, а не ошибка. –
@HansPassant: отказ от размещения сокета может привести к чрезмерному потреблению ресурсов на любом удаленном компьютере, на котором размещается сокет. Если этот дальний компьютер представляет собой небольшой встроенный микропроцессор, его полезность может сильно ухудшиться до тех пор, пока не закончится финализатор или не истечет время его сетевого сокета. – supercat