socktest.erl 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. -module(socktest).
  2. -export([
  3. connect/0,
  4. send/1
  5. ]).
  6. connect() ->
  7. SocketPath = "/tmp/socktest.sock",
  8. Options = [
  9. binary, %% receive binary
  10. {packet, raw}, %% raw data - without prefix - for TCP only
  11. {active, false} %% sync
  12. ],
  13. Conn = gen_tcp:connect({local, SocketPath}, 0, Options), %% Unix domain socket TCP-like
  14. case Conn of
  15. {ok, Socket} ->
  16. %%io:format("connected to Unix socket (TCP) ~s~n", [SocketPath]),
  17. Socket;
  18. {error, Reason} ->
  19. io:format("connect err: ~p~n", [Reason]),
  20. error
  21. end.
  22. send(Message) when is_list(Message) orelse is_binary(Message) ->
  23. Msg = unicode:characters_to_binary(Message, utf8),
  24. Socket = connect(),
  25. send(Socket, Msg).
  26. send(error, _) -> error;
  27. send(Socket, Msg) ->
  28. case gen_tcp:send(Socket, Msg) of
  29. ok ->
  30. case gen_tcp:recv(Socket, 0) of
  31. {ok, Reply} ->
  32. %%io:format("received: ~s~n", [Reply]),
  33. gen_tcp:close(Socket),
  34. Reply;
  35. {error, Reason} ->
  36. %%io:format("receive err: ~p~n", [Reason]),
  37. gen_tcp:close(Socket),
  38. {error, Reason}
  39. end;
  40. E = {error, Reason} ->
  41. io:format("send err: ~p~n", [Reason]),
  42. gen_tcp:close(Socket),
  43. E
  44. end.