我尝试通过haskell连接到已创建的套接字:
-- Logger
putStrLn "Create socket"
sock_logger <- socket AF_INET Stream 0
putStrLn "Bind socket"
connect sock_logger (SockAddrInet 5000 0)
putStrLn "Listen socket"
listen sock_logger 2
putStrLn "Logger listening on port 5000..."
(conn_logger, _) <- accept sock_logger
putStrLn "Logger connection accepted"
Scocket已被其他应用程序创建。但是在connect sock_logger (SockAddrInet 5000 0)
之后,我得到
helloworld-exe.EXE: Network.Socket.connect: <socket: 440>: failed (Cannot assign requested address (WSAEADDRNOTAVAIL))
如何连接到客户端套接字(不创建新的套接字)我用SockAddrInet 50000创建的所有套接字。是否可以依赖于地址(可能需要127.0.0.1而不是localhost?)
也许您正在寻找tupleToHostAddress
,如
connect sock_logger (SockAddrInet 5000 (tupleToHostAddress (127, 0, 0, 1)))
谢谢Daniel Wagner,确实需要使用tupleToHostAddress (127, 0, 0, 1)
和listen ...
是错误的。正确的版本:
putStrLn "Create socket"
sock_logger <- socket AF_INET Stream 0
putStrLn "Bind socket"
connect sock_logger (SockAddrInet 5000 (tupleToHostAddress (127, 0, 0, 1)))
putStrLn "Connected to logger on port 5000..."