[トップ][一覧][最近の更新]

編集履歴:過去のバージョン

2008/02/26 15:14:14 JST時点でのProgramming/Erlang/2008/02/26/udpmsgの内容

現在のバージョンとの差分を見る

編集履歴ページに戻る

  せっかくだからErlang版も張っとく。
  
  {{{
  -module(udpmsg).
  -export([send/2]).
  
  -include_lib("kernel/include/inet.hrl").
  
  -define(IPMSG_VERSION,      16#0001).
  -define(IPMSG_DEFAULT_PORT, 16#0979).
  
  -define(IPMSG_SENDMSG,      16#020).
  -define(IPMSG_SENDCHECKOPT, 16#100).
  
  -define(DEFAULT_UDP_OPTS, [
                             {active, false},
  %			   {broadcast, true}
  			   {reuseaddr, true},
                            ]).
  
  send_format(Num, Host, User, Cmd) ->
      lists:flatten(io_lib:format("~.10b:~.10b:~s:~s:~.10b:",    [?IPMSG_VERSION, Num, User, Host, Cmd])).
  send_format(Num, Host, User, Cmd, Extra) ->
      lists:flatten(io_lib:format("~.10b:~.10b:~s:~s:~.10b:~s", [?IPMSG_VERSION, Num, User, Host, Cmd, Extra])).
  
  send(Host, Msg) ->
      Num = erlang:phash(erlang:localtime(), 16777215),
      case gen_udp:open(0, ?DEFAULT_UDP_OPTS) of
  	{ok, Socket} ->
  	    EntMsg = send_format(Num, "local", "erlang", ?IPMSG_SENDMSG, Msg),
  	    io:format("send ~s port ~w~n", [EntMsg, ?IPMSG_DEFAULT_PORT]),
  	    gen_udp:send(Socket, Host, ?IPMSG_DEFAULT_PORT, EntMsg),
  
  	    gen_udp:close(Socket);
  	Error ->
  	    Error
      end.
  }}}