Нет, вам не нужно передавать StateObject.Кажется, что пример на этой странице является неполным, потому что StateObject не определен.Вы можете передать любой объект или даже ноль.Метод BeginAccept не заботится.Все, что он делает - это передает значение этого параметра в метод EndAccept, где вы можете извлечь его из свойства AsyncState объекта asyncResult, к которому можно получить доступ из метода EndAccept.
Это позволяет переносить любую информацию, которая может вам понадобиться в методе EndAccept, из метода BeginAccept.