Зачем нужны Windows с SocketsDo?

В окнах сокеты должны быть инициализированы, как показано в Сети.

В операционных системах Windows сетевая подсистема должна быть инициализирована с помощью withSocketsDo, прежде чем можно будет использовать какие-либо сетевые операции. например.

  main = withSocketsDo $ do {...}

Хотя это строго необходимо только на платформах Windows, на других платформах это безвредно, поэтому для мобильности рекомендуется использовать его постоянно.

Что особенного в окнах?

2 ответа

Решение

В существующих версиях сетевой библиотеки withSocketsDo используется для инициализации библиотеки Winsock, что является обязательным требованием для Windows. На других платформах не требуется инициализация библиотеки, поэтому withSocketsDo ничего не делает.

В будущих версиях сетевой библиотеки withSocketsDo вызывается автоматически, поэтому его нужно включить только для совместимости со старыми версиями, подробности изменений см. в этом блоге.

Windows, в отличие от других платформ, требует, чтобы процессы запускали свои сетевые подключения вручную, инициализируя WinSock.dll. Между тем, Haskell, в отличие от других языков, по своему дизайну не имеет глобального изменчивого состояния. Таким образом, инициализация WinSock не может быть скрыта внутри загрузки библиотеки или создания какого-либо одноэлементного объекта, и вместо этого ее необходимо зарегистрировать вручную с помощью явного вызова.

Другие вопросы по тегам