我找不到关于在Haskell中处理Unix域套接字的好信息,我需要一个简单的函数来打开一个套接字并向它写一个命令。
基本上,我需要移植这个简单的Ruby函数(如果它有助于理解我的意思)。
def monitor(string_command)
require "socket"
socket = File.join($vbase, @name, "monitor.soc")
raise RuntimeError, "Monitor socket does not exst!" unless File.exist? socket
begin
UNIXSocket.open(socket) do |s|
s.puts string_command
s.flush
end
rescue
return false
end
true
end
它所做的就是打开socket并向其写入命令,成功后返回true。 谢谢。
我想我想通了。嗯,它的工作原理和做我需要的东西,所以我想它应该做现在。
这里是片段(没有任何错误检查),如果有人需要类似的东西。
monitor n c = do
soc <- socket AF_UNIX Stream 0
connect soc (SockAddrUnix (vmBaseDir </> n </> "monitor.soc"))
send soc (c ++ "\n")
sClose soc
这是一个完整的例子。
{-# Language OverloadedStrings #-}
module Main where
import Network.Socket hiding (send)
import Network.Socket.ByteString
main :: IO ()
main = do
withSocketsDo $ do
soc <- socket AF_UNIX Stream 0
connect (soc) (SockAddrUnix "/tmp2/test2.soc")
send soc ("test123")
close soc