我正在用 haskell 编写 Windows 的 SNTP 客户端。这是抛出 的代码片段Exception: mallocPlainForeignPtrBytes: size must be >= 0,即recv函数执行的操作:
getResponse :: HostName -> IO (Maybe String)
getResponse server = withSocketsDo $ do
s <- socket AF_INET Datagram defaultProtocol
setRecvTimeout s waitingTime
host <- getHostByName server
let hostAddress = head $ hostAddresses $ host
connect s (SockAddrInet sntpPort hostAddress)
sendAll s requestPacket
response <- timeout (-1) (recv s 1024)
return $ BC.unpack <$> response
Run Code Online (Sandbox Code Playgroud)
主要问题是并timeout不能真正防止套接字阻塞。也setSocketOption对我不起作用并且setRecvTimeout有效,但recv …
ecmascript-6 ×1
haskell ×1
javascript ×1
node.js ×1
reactjs ×1
sockets ×1
timeout ×1
webpack ×1