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 に答える