# erlang + Zig with Unix domain socket ``` erl 25 zig 0.13.0 (l)ubuntu 22.04 lts socktest -- TCP-like Unix domain socket example socktest2 -- UDP-like Unix domain socket example ``` ### socktest -- TCP-like Unix domain socket example ``` // in terminal 1 $ zig build-exe socktest.zig -O ReleaseFast --library c -femit-bin=socktest //$ rm -f /tmp/socktest.sock $ ./socktest Zig server is listening /tmp/socktest.sock // in terminal 2 $ ls -la /tmp/socktest.sock srwxrwxr-x 1 e e 0 сер 7 20:38 /tmp/socktest.sock= $ lsof /tmp/socktest.sock COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME socktest 1929355 e 3u unix 0x00000000e2e74e16 0t0 14115541 /tmp/socktest.sock type=STREAM $ erl 1> c(socktest). {ok,socktest} 2> socktest:send("hello"). <<"Hello World (by Zig) !">> 3> socktest:send("factorial 5"). <<"factorial(5) = 120">> 4> socktest:send("factorial 20"). <<"factorial(20) = 2432902008176640000">> 5> socktest:send("factorial 34"). <<"factorial(34) = 295232799039604140847618609643520000000">> 6> socktest:send("factorial 35"). <<"error: input too large, max is 34">> 7> socktest:send("factorial -5"). <<"error: invalid number">> 8> socktest:send("factorial xyz"). <<"error: invalid number">> 9> q(). ok // in terminal 1 we can see ./socktest Zig server is listening /tmp/socktest.sock client connected receive msg: hello client connected receive msg: factorial 5 client connected receive msg: factorial 20 client connected receive msg: factorial 34 client connected receive msg: factorial 35 client connected receive msg: factorial -5 client connected receive msg: factorial xyz ``` ### socktest2 -- UDP-like Unix domain socket example ``` // in terminal 1 $ zig build-exe socktest2.zig -O ReleaseFast --library c -femit-bin=socktest2 //$ rm -f /tmp/socktest2.sock $ ./socktest2 Zig server is listening /tmp/socktest2.sock // in terminal 2 $ ls -la /tmp/socktest2.sock srwxrwxr-x 1 e e 0 сер 8 12:45 /tmp/socktest2.sock= $ lsof /tmp/socktest2.sock COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME socktest2 2063359 e 3u unix 0x000000002af1affe 0t0 14986276 /tmp/socktest2.sock type=DGRAM $ erl 1> c(socktest2). {ok,socktest2} 2> socktest2:send("hello"). <<"Hello World (by Zig) !">> 3> socktest2:send("factorial 5"). <<"factorial(5) = 120">> 4> socktest2:send("factorial 20"). <<"factorial(20) = 2432902008176640000">> 5> socktest2:send("factorial 34"). <<"factorial(34) = 295232799039604140847618609643520000000">> 6> socktest2:send("factorial 35"). <<"error: input too large, max is 34">> 7> socktest2:send("factorial -5"). <<"error: invalid number">> 8> socktest2:send("factorial xyz"). <<"error: invalid number">> 9> socktest2:send("бла"). <<"unknown command">> 10> q(). ok // in terminal 1 we can see ./socktest2 Zig UDP server is listening /tmp/socktest2.sock receive msg: hello receive msg: factorial 5 receive msg: factorial 20 receive msg: factorial 34 receive msg: factorial 35 receive msg: factorial -5 receive msg: factorial xyz receive msg: бла ```