在Windows中,需要初始化套接字,如Networks。
所示在Windows操作系统上,必须先使用withSocketsDo初始化网络子系统,然后才能使用任何网络操作。例如
main = withSocketsDo $ do {...}
虽然这在Windows平台上是非常必要的,但它在其他平台上是无害的,因此为了便于携带,最好始终使用它。
关于Windows的特别之处?
答案 0 :(得分:8)
在现有版本的网络库中,withSocketsDo
用于初始化Winsock library,这只是Windows上的一项要求。在其他平台上,没有库需要初始化,因此withSocketsDo
什么都不做。
在网络库的未来版本中,withSocketsDo
会自动调用,因此只需要包含它以与旧版本兼容,有关更改背后的详细信息,请参阅this blog post。
答案 1 :(得分:4)
与其他平台不同,Windows需要通过手动初始化WinSock.dll来启动网络连接的进程。同时,与其他语言不同,Haskell在设计上没有全局可变状态。因此,WinSock初始化不能隐藏在库的加载内或创建某个单例对象,而是需要通过显式调用手动注册。