�����åȤ��Τ�Τ��Ф��륷���ƥॳ�����٥�Υ����������� ���륯�饹��Perl�Υ����åȤ��Ф��륢��������Ʊ��٥�ε�ǽ�� ���Ƥޤ������Υ��饹�Ǥϥ����åȥ��ɥ쥹�� pack ���줿ʸ����ǻ��ꤷ�ޤ� (�����åȥ��ɥ쥹��¤�Τ� pack ����ʸ������)��
����Ū�ʥ����åȥץ�����ߥϤ����٥�� TCPSocket���饹�� TCPServer���饹���Ѥ� �ƹԤ��뤳�Ȥ�¿�������Υ��饹�Ϥ��ޤ��Ѥ����ޤ���
Socket.open(domain, type, protocol)
Socket.new(domain, type, protocol)
�����������åȤ��������ޤ���domain��type��
protocol �ϥ��롼�ɥե�����ˤ�������ǻ��ꤷ��
�����ۤȤ�ɤ������ Socket::AF_INET
�Τ褦��
Socket ���饹������Ȥ����������Ƥ��ޤ���domain
��type �˴ؤ��Ƥϡ�"AF_INET"
,
"SOCK_STREAM"
�Τ褦��ʸ����Ǥ����Ǥ��ޤ�����ʸ
����Ǥ��٤Ƥε�ǽ�����Ǥ����ݾڤϤ���ޤ���
Socket.for_fd(fd)
�ե�����ǥ�������ץ� fd ���Ф��뿷���������åȤ��������ޤ���
ruby 1.7 feature: ���Υ�åɤ� BasicSocket �˰�ư���ޤ�����
Socket.getaddrinfo(nodename, servname[, family[, socktype[, protocol[, flags]]]])
RFC 2553��������줿
getaddrinfo()
�ε�ǽ�����륯�饹��åɡ����δؿ���
gethostbyname()
��getservbyname()
������Ȥ����Ѱդ���Ƥ��ꡢ
IP�ΥС������˰�¸���ʤ��ץ�����������ɸ��Ū��API�Ǥ���
���ɥ쥹�����������֤��ޤ������ɥ쥹����Ȥ�7�Ĥ����Ǥ���ʤ뼡�� ��������Ǥ���
ɬ�ܰ����ΰ�̣�ϰʲ����̤�Ǥ���
�Ĥ�ΰ����Ͼ�ά��ǽ�Ǥ���
Socket::AF_INET
�ʤɡ�
���ɥ쥹�ե��ߥ�ˤ����������ꤷ�ޤ���Socket::SOCK_STREAM
�ʤɡ�
�����åȥ������ˤ����������ꤷ�ޤ���Socket::IPPROTO_IP
�ʤɡ�
�ץ��ȥ����ˤ����������ꤷ�ޤ���Socket::AI_PASSIVE
��
Socket::AI_CANONNAME
��
Socket::AI_NUMERICHOST
���Ѱդ���Ƥ����礬����ޤ��������˻���Ǥ�������ΰ�̣�ˤĤ��Ƥ� getaddrinfo(3) �Ȥ��Ʋ�������
��: *1
p Socket.getaddrinfo(Socket.gethostname, "ftp") #=> [["AF_INET", 21, "helium.ruby-lang.org", "210.251.121.214", 2, 1, 6]] pp Socket.getaddrinfo(Socket.gethostname, nil) #=> [["AF_INET", 0, "helium.ruby-lang.org", "210.251.121.214", 2, 1, 6], # ["AF_INET", 0, "helium.ruby-lang.org", "210.251.121.214", 2, 2, 17], # ["AF_INET", 0, "helium.ruby-lang.org", "210.251.121.214", 2, 3, 0]]
Socket.getnameinfo(sa[, flags])
RFC 2553 ��������줿getnameinfo()
�ε�ǽ�����륯
�饹��åɡ� gethostbyaddr()
�� getservbyport()
����
���Ȥ����Ѱդ���Ƥ��ޤ���IP�ΥС������˰�¸���ʤ��ץ�������
�����ɸ��Ū��API�Ǥ���
������֤����������Ǥϥ��ɥ쥹�ȥݡ��Ȥ�ɽ��ʸ����Ǥ���
���� sa �ˤ�ʸ���������Ϳ���ޤ���ʸ����ξ��� sockaddr ��¤�� �Υѥå�ʸ�����Ϳ���ޤ�������Ū�ˤ� getsockaddr ���ͤ����ѤǤ��ޤ��������Ϳ������ˤϡ����Ǥ�3�Ĥξ���4�Ĥξ�� ������ޤ���
���Ǥ�3�Ĥξ��:
[���ɥ쥹�ե��ߥ, �����ӥ�, �ۥ���]
���Ǥ�4�Ĥξ��:
[���ɥ쥹�ե��ߥ, �����ӥ�, Ǥ��, ���ɥ쥹��ɽ��ʸ����]
���ɥ쥹�ե��ߥ�ˤ� Socket::AF_INET
���������¾��ʸ����
�� "AF_INET"
�⤷���� "AF_INET6"
�⤷���� nil
��
����Ǥ��ޤ���������IPv6���Ȥ��ʤ��褦�˥���ѥ��뤵��Ƥ������
"AF_INET6"
��̵���ʻ���Ȥʤ�ޤ������ɥ쥹�ե��ߥ��
nil
����ꤹ�뤳�Ȥ� Socket::AF_UNSPEC
����ꤹ�뤳��
�������Ǥ���
�����ӥ����ۥ��Ȥλ���˴ؤ��Ƥ� �����ӥ���������� �ۥ��Ȼ�������Ȥ��Ƥ���������
���Ǥ�3�Ĥξ��Ǥ⡢�ۥ��Ȥˤϥ��ɥ쥹�����Ǥ��ޤ��������Ǥ�4�� �ξ��ˤϡ��Ǹ�����Ǥ�̾����褷�ʤ����Ȥ��ݾڤ���ޤ���*2
��ά��ǽ����2���� flags �ˤ� getnameinfo(3) ����7���ܤΰ����˻��ꤹ�� flags ���������� Fixnum ��Ϳ���ޤ���
����flags�������뤿�������Ȥ���
Socket::NI_MAXHOST
��
Socket::NI_MAXSERV
��
Socket::NI_NOFQDN
��
Socket::NI_NUMERICHOST
��
Socket::NI_NAMEREQD
��
Socket::NI_NUMERICSERV
��
Socket::NI_DGRAM
���Ѱդ���Ƥ����礬����ޤ���
����������ΰ�̣�ˤĤ��Ƥ� getnameinfo(3)�� ���Ʋ�������
��:
Socket.getnameinfo(Socket.sockaddr_in('21','127.0.0.1')) #=> ["localhost", "ftp"] Socket.getnameinfo([nil, 21,'127.0.0.1']) #=> ["localhost", "ftp"]
Socket.gethostbyaddr(host[, type])
sockaddr ��¤�Τ�ѥå�����ʸ����ۥ��Ⱦ�����֤��ޤ���
�ۥ��Ⱦ���ι�¤�� Socket.gethostbyname��Ʊ���Ǥ���
type �ˤϡ����ɥ쥹������(�ǥե���Ȥ�
Socket::AF_INET
)����ꤷ�ޤ���
Socket.gethostbyname(host)
�ۥ���̾�ޤ���IP���ɥ쥹(������ˡ�˴ؤ��Ƥ� �ۥ��Ȼ��������) ����ۥ��Ȥξ�����֤��ޤ��� �ۥ��Ⱦ���ϰʲ��� 4 ���Ǥ������ɽ������Ƥ��ޤ���
������ǤΥۥ��ȤΥ��ɥ쥹�ϡ��ƥ��ɥ쥹�����פ��б����� C �Υ��ɥ쥹��¤�Τ� pack ����ʸ����Ȥ���ɽ������Ƥ��ޤ��� �㤨�Х��ɥ쥹�����פ� AF_INET (��� 2) �ʤ�� Socket.unpack_sockaddr_in �� unpack �Ǥ��ޤ���
��: irb(main):009:0> Socket.gethostbyname("210.251.121.214") ["helium.ruby-lang.org", ["helium"], 2, "\322\373y\326"] irb(main):009:0> Socket.unpack_sockaddr_in(Socket.gethostbyname("210.251.121.214")[3])[1] "210.251.121.214"
Socket.gethostname
�����ƥ��ɸ��Υۥ���̾��������ޤ��� �ۥ��Ȥ���̾�䥢�ɥ쥹�ʤ�¾�ξ��������ˤ� Socket.getaddrinfo ��ȤäƤ���������
p Socket.gethostname #=> "helium.ruby-lang.org"
Socket.getservbyname(service[, proto])
service, proto���б�����ݡ����ֹ����
���ޤ���proto�ξ�ά�ͤ�"tcp"
�Ǥ���
Socket.sockaddr_in(port, host) ((<ruby 1.7 feature>))
Socket.pack_sockaddr_in(port, host) ((<ruby 1.7 feature>))
���ꤷ�����ɥ쥹�������åȥ��ɥ쥹��¤�Τ� pack ����ʸ���� ���֤��ޤ���port �ϡ��ݡ����ֹ��ɽ�� Fixnum ���뤤�ϡ��ݡ��� �ֹ桢�����ӥ�̾��ɽ��ʸ����Ǥ���
require 'socket' p Socket.pack_sockaddr_in("echo", "localhost") => "\002\000\000\a\177\000\000\001\000\000\000\000\000\000\000\000"
Socket.sockaddr_un(path) ((<ruby 1.7 feature>))
Socket.pack_sockaddr_un(path) ((<ruby 1.7 feature>))
���ꤷ�����ɥ쥹�������åȥ��ɥ쥹��¤�Τ� pack ����ʸ���� ���֤��ޤ���
require 'socket' p Socket.pack_sockaddr_un("/tmp/.X11-unix/X0") => "\001\000/tmp/.X11-unix/X0\000...."
Socket.pair(domain, type, protocol)
Socket.socketpair(domain, type, protocol)
��ߤ˷�礵�줿�����åȤΥڥ���ޤ�2���Ǥ�������֤��ޤ���
��������Socket.open
��Ʊ���Ǥ���
Socket.unpack_sockaddr_in(addr) ((<ruby 1.7 feature>))
�����åȥ��ɥ쥹��¤�Τ� pack ����ʸ������
unpack �������ɥ쥹���֤��ޤ����֤�����ͤ� [port, ipaddr]
������Ǥ���
require 'socket' p Socket.unpack_sockaddr_in(Socket.pack_sockaddr_in("echo", "localhost")) => [7, "127.0.0.1"]
Socket.unpack_sockaddr_un(addr) ((<ruby 1.7 feature>))