Зачем нужны Windows с SocketsDo?
В окнах сокеты должны быть инициализированы, как показано в Сети.
В операционных системах Windows сетевая подсистема должна быть инициализирована с помощью withSocketsDo, прежде чем можно будет использовать какие-либо сетевые операции. например.
main = withSocketsDo $ do {...}
Хотя это строго необходимо только на платформах Windows, на других платформах это безвредно, поэтому для мобильности рекомендуется использовать его постоянно.
Что особенного в окнах?
2 ответа
В существующих версиях сетевой библиотеки withSocketsDo
используется для инициализации библиотеки Winsock, что является обязательным требованием для Windows. На других платформах не требуется инициализация библиотеки, поэтому withSocketsDo
ничего не делает.
В будущих версиях сетевой библиотеки withSocketsDo
вызывается автоматически, поэтому его нужно включить только для совместимости со старыми версиями, подробности изменений см. в этом блоге.
Windows, в отличие от других платформ, требует, чтобы процессы запускали свои сетевые подключения вручную, инициализируя WinSock.dll. Между тем, Haskell, в отличие от других языков, по своему дизайну не имеет глобального изменчивого состояния. Таким образом, инициализация WinSock не может быть скрыта внутри загрузки библиотеки или создания какого-либо одноэлементного объекта, и вместо этого ее необходимо зарегистрировать вручную с помощью явного вызова.