通常情况下(网络配置正确的主机),不需要为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可以查看网络配置信息,例如:
([email protected])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]}] ([email protected])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方式请求。