GNU/Linux >> Belajar Linux >  >> Linux

erlang:Dukungan soket domain UNIX?

Erlang/OTP dilengkapi dengan driver untuk soket tcp dan udp saja. Jadi...

Tidak.

Driver bagian ketiga

  • unixdom_drv di http://jungerl.sourceforge.net/
  • uds_dist dalam contoh driver pohon sumber
  • procket di https://github.com/msantos/procket

Di Erlang/OTP 19.0, Soket UNIX sekarang tersedia, sebagaimana dinyatakan dalam readme:

Aplikasi OTP-13572:erts, kernel

Id Terkait:PR-612

* SOROTAN *

Dukungan eksperimental untuk Soket Domain Unix telah diterapkan. Baca sumbernya jika Anda ingin mencobanya. Contoh:gen_udp:open(0,[{ifaddr,{local,"/tmp/socket"}}]). Dokumentasi akan ditulis setelah umpan balik pengguna pada API eksperimental.

Contoh:

lsock.erl:

-module(lsock).
-export([watcher/1, test/0]).

watcher(Parent) -> 
  {ok, Sockin} = gen_udp:open(0, [{ifaddr, {local, "/tmp/testsockin"}}]),
  io:format("watcher ok? ~w ~w~n", [ok, Sockin]),
  Parent ! start,
  receive
    Msg -> io:format("watcher got: ~p ~n", [Msg]) end.

test() ->
  file:delete("/tmp/testsockin"),
  file:delete("/tmp/testsockout"),
  _ = spawn(lsock, watcher, [self()]),
  {ok, Sockout} = gen_udp:open(0, [{ifaddr, {local, "/tmp/testsockout"}}]),
  io:format("parent ok? ~w ~w~n", [ok, Sockout]),
  receive start ->
    gen_udp:send(Sockout, {local, "/tmp/testsockin"}, 0, "hi") end.

Dan berikut ini menunjukkan hasilnya:

$ erlc lsock.erl 
$ erl
Erlang/OTP 19 [erts-8.0.1] [source-ca40008] [64-bit] [smp:2:2] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V8.0.1  (abort with ^G)
1> lsock:test().
<0.58.0>
parent ok? ok #Port<0.455>
watcher ok? ok #Port<0.456>
watcher got: {udp,#Port<0.456>,{local,<<"/tmp/testsockout">>},0,"hi"} 
ok
2> 

nanomsg perpustakaan mendukung soket domain Unix, dan enm driver menyediakan pengikatan bahasa Erlang untuk nanomsg .

Misalnya, untuk membuka sisi respons dari protokol permintaan/respons dan mengikat ke alamat soket domain Unix:

Url = "ipc:///path/to/socket/file",
{ok,Rep} = enm:rep([{bind,Url}]),

Di sini, Rep adalah nanomsg stopkontak. Ini mendukung send dan recv serta semua Erlang {active, true | false | N} biasa mode, dll. yang disediakan soket Erlang TCP/SCTP/UDP biasa. Untuk detail lebih lanjut lihat enm github README.


Linux
  1. Siapa yang Punya Ujung Lain Dari Socketpair Unix Ini?

  2. Linux – Kernel:Dukungan Namespaces?

  3. Jenis pengalihan domain

  1. Perbedaan antara STREAM domain UNIX dan soket DATAGRAM?

  2. Menghubungkan ke soket UNIX yang sudah ada dengan node.js?

  3. Bagaimana cara mengakses Soket Domain Unix dari baris perintah?

  1. Linux – Apakah Linux Sebuah Unix?

  2. Apakah Linux itu Unix?

  3. Apa yang ditunjukkan oleh simbol @ di awal jalur soket domain unix di Linux?