8

我找不到有关在 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

它所做的一切都是打开套接字并向其写入命令,成功后返回 true。谢谢你。

4

2 回答 2

11

我想我想通了。好吧,它可以工作并且可以满足我的需要,所以我想它现在应该这样做。

如果有人需要类似的东西,这是片段(没有任何错误检查):

monitor n c = do
  soc <- socket AF_UNIX Stream 0
  connect soc (SockAddrUnix (vmBaseDir </> n </> "monitor.soc"))
  send soc (c ++ "\n")
  sClose soc
于 2013-11-15T01:50:29.273 回答
1

这是一个完整的例子:

{-# 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
于 2020-05-27T18:44:26.030 回答