Erlang的Inet configuration

原创
2014/05/28 13:40
阅读数 278

    通常情况下(网络配置正确的主机),不需要为Erlang配置Inet。如果你有特别的需要,或你有特别的问题,才可能用到Inet配置。

    Erlang运行的时候会读一个kernel变量,inetrc。如果它被定义了,它就是指定一个配置文件的位置。

    可以有两种方式设置这个变量:

        1) 在erlang shell的选项里指定;

        2) 在环境变量ERL_INETRC里指定。

    erlang shell选项指定的会覆盖环境变量指定的。启动shell时指定的例子:

erl -kernel inetrc '"./cfg_files/erl_inetrc"'

    注意:用单引号把位置字符串括起来。如果没有指定inetrc变量,则使用缺省值。

    Erlang将会记录以下的网络配置信息(从系统文件或注册表读取)

       1) 主机名和地址的映射
       2) 本地主机域名
       3) DNS服务器
       4) 搜索域
       5) 查看方式

    调用inet:get_rc可以查看网络配置信息,例如:

(A@john-kdm.kdcrd.com)1> inet:get_rc().
[{host,{127,0,0,1},["localhost","john.server","msn.test"]},
 {host,{192,168,1,99},["lemon.test"]},
 {domain,"kdcrd.com"},
 {search,["kdcrd.com"]},
 {lookup,[native]}]
(A@john-kdm.kdcrd.com)2>

   上诉例子中记录了2个host(包括ip地址和主机名),本地主机所属的域名是kdcrd.com,搜索域是[kdcrd.com],查看方式是native。

    搜索域作用,如果你要解析的名称不以'.'结束,解析器会按照要解析的名称+搜索域尝试解析。例如,搜索域为example.net, example.com,待解析的名称为tom,则解析器会尝试解析tom.example.net,如果失败,再尝试解析example.com。

    lookup有三种方式,native(默认的), file, dns。native是指用系统调用的方式解析域名,file是从系统文件里记录的host来解析,dns则使用dns client从dns服务器获取域名解析。

    一份inet配置文件的例子:

%% -- ERLANG INET CONFIGURATION FILE --
%% read the hosts file
{file, hosts, "/etc/hosts"}.
%% add a particular host
{host, {134,138,177,105}, ["finwe"]}.
%% do not monitor the hosts file, because file path is empty, the file not exists
{hosts_file, ""}.
%% read and monitor nameserver config from here
{resolv_conf, "/usr/local/etc/resolv.conf"}.
%% enable EDNS
{edns,0}.
%% disable caching
{cache_size, 0}.
%% specify lookup method
{lookup, [file, dns]}.

   从例子中可以看出,配置由多行语句组成,每行是一个元组项式,并且以'.'号结束。


{edns, Version}.
    Version = false | 0
    0使用edns,false不使用(缺省值)

  udp方式的dns通常结果最多是512个字节,edns就是指示dns server返回较大的结果,通常是在4096字节内。

{usevc, Bool}.
    Bool = true | false
    告诉客户端用tcp方式,而不是udp方式请求。 缺省值是false。

   通常udp方式的应答足够带回来结果,但是在有些情况下不够,应答里会带上truncated标志,表示结果被截断。客户端会再次以tcp的方式请求。{usevc, true}就是告诉客户端直接以tcp方式请求。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部