Haskell: доменные сокеты Unix - PullRequest
7 голосов
/ 22 февраля 2012

Я не могу найти хорошую информацию о работе с сокетами Unix Domain в Haskell. Мне нужна простая функция, чтобы открыть сокет и записать в него команду. Может кто-нибудь помочь мне советом, где почитать об этом или, может быть, привести пример?

По сути, мне нужно портировать эту простую функцию 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 при успехе. Спасибо.

1 Ответ

8 голосов
/ 15 ноября 2013

Думаю, я понял это. Ну, это работает и делает то, что мне нужно, поэтому я думаю, что это должно сделать сейчас.

Вот фрагмент (без каких-либо проверок на ошибки), если кому-то нужна похожая вещь:

monitor n c = do
  soc <- socket AF_UNIX Stream 0
  connect soc (SockAddrUnix (vmBaseDir </> n </> "monitor.soc"))
  send soc (c ++ "\n")
  sClose soc
...