rubysl-socket 2.0.1 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +70 -16
  3. data/lib/rubysl/socket.rb +201 -1396
  4. data/lib/rubysl/socket/ancillary_data.rb +56 -0
  5. data/lib/rubysl/socket/bsd.rb +28 -0
  6. data/lib/rubysl/socket/error.rb +67 -0
  7. data/lib/rubysl/socket/foreign.rb +324 -0
  8. data/lib/rubysl/socket/foreign/addrinfo.rb +10 -0
  9. data/lib/rubysl/socket/foreign/hostent.rb +36 -0
  10. data/lib/rubysl/socket/foreign/ifaddrs.rb +129 -0
  11. data/lib/rubysl/socket/foreign/iovec.rb +18 -0
  12. data/lib/rubysl/socket/foreign/linger.rb +41 -0
  13. data/lib/rubysl/socket/foreign/msghdr.rb +41 -0
  14. data/lib/rubysl/socket/foreign/servent.rb +17 -0
  15. data/lib/rubysl/socket/foreign/sockaddr.rb +21 -0
  16. data/lib/rubysl/socket/foreign/sockaddr_in.rb +25 -0
  17. data/lib/rubysl/socket/foreign/sockaddr_in6.rb +25 -0
  18. data/lib/rubysl/socket/foreign/sockaddr_un.rb +29 -0
  19. data/lib/rubysl/socket/ipv6.rb +38 -0
  20. data/lib/rubysl/socket/linux.rb +16 -0
  21. data/lib/rubysl/socket/socket_options.rb +84 -0
  22. data/lib/rubysl/socket/version.rb +1 -1
  23. data/lib/socket.rb +45 -1
  24. data/lib/socket/addrinfo.rb +453 -0
  25. data/lib/socket/ancillary_data.rb +114 -0
  26. data/lib/socket/basic_socket.rb +295 -0
  27. data/lib/socket/constants.rb +41 -0
  28. data/lib/socket/ifaddr.rb +29 -0
  29. data/lib/socket/ip_socket.rb +37 -0
  30. data/lib/socket/mri.rb +928 -0
  31. data/lib/socket/option.rb +96 -0
  32. data/lib/socket/socket.rb +353 -0
  33. data/lib/socket/socket_error.rb +2 -0
  34. data/lib/socket/tcp_server.rb +78 -0
  35. data/lib/socket/tcp_socket.rb +109 -0
  36. data/lib/socket/udp_socket.rb +73 -0
  37. data/lib/socket/unix_server.rb +35 -0
  38. data/lib/socket/unix_socket.rb +78 -0
  39. data/rubysl-socket.gemspec +15 -10
  40. metadata +78 -293
  41. data/.gitignore +0 -17
  42. data/.travis.yml +0 -9
  43. data/Gemfile +0 -4
  44. data/Rakefile +0 -1
  45. data/spec/addrinfo/afamily_spec.rb +0 -5
  46. data/spec/addrinfo/bind_spec.rb +0 -5
  47. data/spec/addrinfo/canonname_spec.rb +0 -5
  48. data/spec/addrinfo/connect_from_spec.rb +0 -5
  49. data/spec/addrinfo/connect_spec.rb +0 -5
  50. data/spec/addrinfo/connect_to_spec.rb +0 -5
  51. data/spec/addrinfo/family_addrinfo_spec.rb +0 -5
  52. data/spec/addrinfo/foreach_spec.rb +0 -5
  53. data/spec/addrinfo/getaddrinfo_spec.rb +0 -5
  54. data/spec/addrinfo/getnameinfo_spec.rb +0 -5
  55. data/spec/addrinfo/inspect_sockaddr_spec.rb +0 -5
  56. data/spec/addrinfo/inspect_spec.rb +0 -5
  57. data/spec/addrinfo/ip_address_spec.rb +0 -5
  58. data/spec/addrinfo/ip_port_spec.rb +0 -5
  59. data/spec/addrinfo/ip_spec.rb +0 -9
  60. data/spec/addrinfo/ip_unpack_spec.rb +0 -5
  61. data/spec/addrinfo/ipv4_loopback_spec.rb +0 -5
  62. data/spec/addrinfo/ipv4_multicast_spec.rb +0 -5
  63. data/spec/addrinfo/ipv4_private_spec.rb +0 -5
  64. data/spec/addrinfo/ipv4_spec.rb +0 -5
  65. data/spec/addrinfo/ipv6_linklocal_spec.rb +0 -5
  66. data/spec/addrinfo/ipv6_loopback_spec.rb +0 -5
  67. data/spec/addrinfo/ipv6_mc_global_spec.rb +0 -5
  68. data/spec/addrinfo/ipv6_mc_linklocal_spec.rb +0 -5
  69. data/spec/addrinfo/ipv6_mc_nodelocal_spec.rb +0 -5
  70. data/spec/addrinfo/ipv6_mc_orglocal_spec.rb +0 -5
  71. data/spec/addrinfo/ipv6_mc_sitelocal_spec.rb +0 -5
  72. data/spec/addrinfo/ipv6_multicast_spec.rb +0 -5
  73. data/spec/addrinfo/ipv6_sitelocal_spec.rb +0 -5
  74. data/spec/addrinfo/ipv6_spec.rb +0 -5
  75. data/spec/addrinfo/ipv6_to_ipv4_spec.rb +0 -5
  76. data/spec/addrinfo/ipv6_unspecified_spec.rb +0 -5
  77. data/spec/addrinfo/ipv6_v4compat_spec.rb +0 -5
  78. data/spec/addrinfo/ipv6_v4mapped_spec.rb +0 -5
  79. data/spec/addrinfo/listen_spec.rb +0 -5
  80. data/spec/addrinfo/marshal_dump_spec.rb +0 -5
  81. data/spec/addrinfo/marshal_load_spec.rb +0 -5
  82. data/spec/addrinfo/pfamily_spec.rb +0 -5
  83. data/spec/addrinfo/protocol_spec.rb +0 -5
  84. data/spec/addrinfo/socktype_spec.rb +0 -5
  85. data/spec/addrinfo/tcp_spec.rb +0 -5
  86. data/spec/addrinfo/to_s_spec.rb +0 -5
  87. data/spec/addrinfo/to_sockaddr_spec.rb +0 -5
  88. data/spec/addrinfo/udp_spec.rb +0 -5
  89. data/spec/addrinfo/unix_path_spec.rb +0 -5
  90. data/spec/addrinfo/unix_spec.rb +0 -9
  91. data/spec/basicsocket/close_read_spec.rb +0 -42
  92. data/spec/basicsocket/close_write_spec.rb +0 -42
  93. data/spec/basicsocket/do_not_reverse_lookup_spec.rb +0 -78
  94. data/spec/basicsocket/for_fd_spec.rb +0 -37
  95. data/spec/basicsocket/getpeername_spec.rb +0 -24
  96. data/spec/basicsocket/getsockname_spec.rb +0 -27
  97. data/spec/basicsocket/getsockopt_spec.rb +0 -54
  98. data/spec/basicsocket/ioctl_spec.rb +0 -22
  99. data/spec/basicsocket/recv_nonblock_spec.rb +0 -6
  100. data/spec/basicsocket/recv_spec.rb +0 -76
  101. data/spec/basicsocket/send_spec.rb +0 -81
  102. data/spec/basicsocket/setsockopt_spec.rb +0 -333
  103. data/spec/basicsocket/shutdown_spec.rb +0 -5
  104. data/spec/constants/constants_spec.rb +0 -63
  105. data/spec/fixtures/classes.rb +0 -174
  106. data/spec/fixtures/send_io.txt +0 -1
  107. data/spec/ipsocket/addr_spec.rb +0 -72
  108. data/spec/ipsocket/getaddress_spec.rb +0 -26
  109. data/spec/ipsocket/peeraddr_spec.rb +0 -79
  110. data/spec/ipsocket/recvfrom_spec.rb +0 -64
  111. data/spec/option/int_spec.rb +0 -27
  112. data/spec/option/linger_spec.rb +0 -52
  113. data/spec/option/new_spec.rb +0 -32
  114. data/spec/shared/pack_sockaddr.rb +0 -26
  115. data/spec/shared/partially_closable_sockets.rb +0 -13
  116. data/spec/shared/recv_nonblock.rb +0 -33
  117. data/spec/shared/socketpair.rb +0 -35
  118. data/spec/socket/accept_nonblock_spec.rb +0 -27
  119. data/spec/socket/accept_spec.rb +0 -1
  120. data/spec/socket/bind_spec.rb +0 -80
  121. data/spec/socket/connect_nonblock_spec.rb +0 -62
  122. data/spec/socket/connect_spec.rb +0 -1
  123. data/spec/socket/for_fd_spec.rb +0 -29
  124. data/spec/socket/getaddrinfo_spec.rb +0 -120
  125. data/spec/socket/gethostbyaddr_spec.rb +0 -1
  126. data/spec/socket/gethostbyname_spec.rb +0 -26
  127. data/spec/socket/gethostname_spec.rb +0 -9
  128. data/spec/socket/getnameinfo_spec.rb +0 -57
  129. data/spec/socket/getservbyname_spec.rb +0 -24
  130. data/spec/socket/listen_spec.rb +0 -21
  131. data/spec/socket/new_spec.rb +0 -109
  132. data/spec/socket/pack_sockaddr_in_spec.rb +0 -6
  133. data/spec/socket/pack_sockaddr_un_spec.rb +0 -6
  134. data/spec/socket/pair_spec.rb +0 -6
  135. data/spec/socket/recvfrom_nonblock_spec.rb +0 -1
  136. data/spec/socket/recvfrom_spec.rb +0 -1
  137. data/spec/socket/sockaddr_in_spec.rb +0 -6
  138. data/spec/socket/sockaddr_un_spec.rb +0 -6
  139. data/spec/socket/socket_spec.rb +0 -37
  140. data/spec/socket/socketpair_spec.rb +0 -6
  141. data/spec/socket/sysaccept_spec.rb +0 -1
  142. data/spec/socket/unpack_sockaddr_in_spec.rb +0 -16
  143. data/spec/socket/unpack_sockaddr_un_spec.rb +0 -2
  144. data/spec/tcpserver/accept_nonblock_spec.rb +0 -30
  145. data/spec/tcpserver/accept_spec.rb +0 -60
  146. data/spec/tcpserver/gets_spec.rb +0 -17
  147. data/spec/tcpserver/listen_spec.rb +0 -1
  148. data/spec/tcpserver/new_spec.rb +0 -88
  149. data/spec/tcpserver/output_spec.rb +0 -8
  150. data/spec/tcpserver/readpartial_spec.rb +0 -8
  151. data/spec/tcpserver/sysaccept_spec.rb +0 -1
  152. data/spec/tcpsocket/gethostbyname_spec.rb +0 -62
  153. data/spec/tcpsocket/new_spec.rb +0 -5
  154. data/spec/tcpsocket/open_spec.rb +0 -5
  155. data/spec/tcpsocket/partially_closable_spec.rb +0 -20
  156. data/spec/tcpsocket/recv_nonblock_spec.rb +0 -31
  157. data/spec/tcpsocket/setsockopt_spec.rb +0 -49
  158. data/spec/tcpsocket/shared/new.rb +0 -85
  159. data/spec/udpsocket/bind_spec.rb +0 -33
  160. data/spec/udpsocket/connect_spec.rb +0 -1
  161. data/spec/udpsocket/new_spec.rb +0 -1
  162. data/spec/udpsocket/open_spec.rb +0 -12
  163. data/spec/udpsocket/recvfrom_nonblock_spec.rb +0 -1
  164. data/spec/udpsocket/send_spec.rb +0 -57
  165. data/spec/unixserver/accept_nonblock_spec.rb +0 -33
  166. data/spec/unixserver/accept_spec.rb +0 -64
  167. data/spec/unixserver/for_fd_spec.rb +0 -32
  168. data/spec/unixserver/new_spec.rb +0 -5
  169. data/spec/unixserver/open_spec.rb +0 -25
  170. data/spec/unixserver/shared/new.rb +0 -23
  171. data/spec/unixsocket/addr_spec.rb +0 -37
  172. data/spec/unixsocket/new_spec.rb +0 -5
  173. data/spec/unixsocket/open_spec.rb +0 -26
  174. data/spec/unixsocket/pair_spec.rb +0 -38
  175. data/spec/unixsocket/partially_closable_spec.rb +0 -25
  176. data/spec/unixsocket/path_spec.rb +0 -29
  177. data/spec/unixsocket/peeraddr_spec.rb +0 -29
  178. data/spec/unixsocket/recv_io_spec.rb +0 -40
  179. data/spec/unixsocket/recvfrom_spec.rb +0 -48
  180. data/spec/unixsocket/send_io_spec.rb +0 -30
  181. data/spec/unixsocket/shared/new.rb +0 -25
@@ -1 +0,0 @@
1
- require File.expand_path('../../fixtures/classes', __FILE__)
@@ -1,26 +0,0 @@
1
- # -*- encoding: US-ASCII -*-
2
- require File.expand_path('../../fixtures/classes', __FILE__)
3
-
4
- require 'socket'
5
-
6
- describe "Socket#gethostbyname" do
7
- it "returns broadcast address info for '<broadcast>'" do
8
- addr = Socket.gethostbyname('<broadcast>').first;
9
- ["broadcasthost", "255.255.255.255"].should include(addr)
10
- end
11
-
12
- it "returns broadcast address info for '<any>'" do
13
- addr = Socket.gethostbyname('<any>').first;
14
- addr.should == "0.0.0.0"
15
- end
16
-
17
- it "returns address list in pack format (IPv4)" do
18
- laddr = Socket.gethostbyname('127.0.0.1')[3..-1];
19
- laddr.should == ["\x7f\x00\x00\x01"]
20
- end
21
-
22
- it "returns address list in pack format (IPv6)" do
23
- laddr = Socket.gethostbyname('::1')[3..-1]
24
- laddr.should == ["\x00" * 15 + "\x01"]
25
- end
26
- end
@@ -1,9 +0,0 @@
1
- require File.expand_path('../../fixtures/classes', __FILE__)
2
-
3
- describe "Socket.gethostname" do
4
- # This currently works in Unix and Windows. Edit the helper
5
- # to add other platforms.
6
- it "returns the host name" do
7
- Socket.gethostname.should == hostname
8
- end
9
- end
@@ -1,57 +0,0 @@
1
- require File.expand_path('../../fixtures/classes', __FILE__)
2
-
3
- require 'socket'
4
-
5
- describe "Socket.getnameinfo" do
6
- before :all do
7
- @reverse_lookup = BasicSocket.do_not_reverse_lookup
8
- BasicSocket.do_not_reverse_lookup = true
9
- end
10
-
11
- after :all do
12
- BasicSocket.do_not_reverse_lookup = @reverse_lookup
13
- end
14
-
15
- it "gets the name information and don't resolve it" do
16
- sockaddr = Socket.sockaddr_in SocketSpecs.port, '127.0.0.1'
17
- name_info = Socket.getnameinfo(sockaddr, Socket::NI_NUMERICHOST | Socket::NI_NUMERICSERV)
18
- name_info.should == ['127.0.0.1', "#{SocketSpecs.port}"]
19
- end
20
-
21
- it "gets the name information and resolve the host" do
22
- sockaddr = Socket.sockaddr_in SocketSpecs.port, '127.0.0.1'
23
- name_info = Socket.getnameinfo(sockaddr, Socket::NI_NUMERICSERV)
24
- name_info[0].should be_valid_DNS_name
25
- name_info[1].should == SocketSpecs.port.to_s
26
- end
27
-
28
- it "gets the name information and resolves the service" do
29
- sockaddr = Socket.sockaddr_in 80, '127.0.0.1'
30
- name_info = Socket.getnameinfo(sockaddr)
31
- name_info.size.should == 2
32
- name_info[0].should be_valid_DNS_name
33
- # see http://www.iana.org/assignments/port-numbers
34
- name_info[1].should =~ /^(www|http|www-http)$/
35
- end
36
-
37
- it "gets a 3-element array and doesn't resolve hostname" do
38
- name_info = Socket.getnameinfo(["AF_INET", SocketSpecs.port, '127.0.0.1'], Socket::NI_NUMERICHOST | Socket::NI_NUMERICSERV)
39
- name_info.should == ['127.0.0.1', "#{SocketSpecs.port}"]
40
- end
41
-
42
- it "gets a 3-element array and resolves the service" do
43
- name_info = Socket.getnameinfo ["AF_INET", 80, '127.0.0.1']
44
- name_info[1].should =~ /^(www|http|www-http)$/
45
- end
46
-
47
- it "gets a 4-element array and doesn't resolve hostname" do
48
- name_info = Socket.getnameinfo(["AF_INET", SocketSpecs.port, 'foo', '127.0.0.1'], Socket::NI_NUMERICHOST | Socket::NI_NUMERICSERV)
49
- name_info.should == ['127.0.0.1', "#{SocketSpecs.port}"]
50
- end
51
-
52
- it "gets a 4-element array and resolves the service" do
53
- name_info = Socket.getnameinfo ["AF_INET", 80, 'foo', '127.0.0.1']
54
- name_info[1].should =~ /^(www|http|www-http)$/
55
- end
56
-
57
- end
@@ -1,24 +0,0 @@
1
- require File.expand_path('../../../../spec_helper', __FILE__)
2
- require File.expand_path('../../fixtures/classes', __FILE__)
3
-
4
- describe "Socket#getservbyname" do
5
- it "returns the port for service 'http'" do
6
- Socket.getservbyname('http').should == 80
7
- end
8
-
9
- it "returns the port for service 'http' with protocol 'tcp'" do
10
- Socket.getservbyname('http', 'tcp').should == 80
11
- end
12
-
13
- it "returns the port for service 'domain' with protocol 'udp'" do
14
- Socket.getservbyname('domain', 'udp').should == 53
15
- end
16
-
17
- it "returns the port for service 'daytime'" do
18
- Socket.getservbyname('daytime').should == 13
19
- end
20
-
21
- it "raises a SocketError when the service or port is invalid" do
22
- lambda { Socket.getservbyname('invalid') }.should raise_error(SocketError)
23
- end
24
- end
@@ -1,21 +0,0 @@
1
- require File.expand_path('../../fixtures/classes', __FILE__)
2
-
3
- include Socket::Constants
4
-
5
- describe "Socket#listen" do
6
- before :each do
7
- @socket = Socket.new(AF_INET, SOCK_STREAM, 0)
8
- end
9
-
10
- after :each do
11
- @socket.closed?.should be_false
12
- @socket.close
13
- end
14
-
15
- it "verifies we can listen for incoming connections" do
16
- sockaddr = Socket.pack_sockaddr_in(SocketSpecs.port, "127.0.0.1")
17
- @socket.setsockopt(Socket::SOL_SOCKET, Socket::SO_REUSEADDR, true)
18
- @socket.bind(sockaddr)
19
- @socket.listen(1).should == 0
20
- end
21
- end
@@ -1,109 +0,0 @@
1
- require File.expand_path('../../fixtures/classes', __FILE__)
2
-
3
- describe "Socket.new" do
4
- before :each do
5
- @socket = nil
6
- end
7
-
8
- after :each do
9
- @socket.close if @socket and not @socket.closed?
10
- end
11
-
12
- describe "with a Socket::PF_INET family" do
13
- it "creates a socket with a :DGRAM type specifier" do
14
- @socket = Socket.new Socket::PF_INET, "SOCK_DGRAM", 0
15
- @socket.should be_an_instance_of(Socket)
16
- end
17
-
18
- it "creates a socket with a Socket::PF_STREAM type specifier" do
19
- @socket = Socket.new Socket::PF_INET, "SOCK_STREAM", 0
20
- @socket.should be_an_instance_of(Socket)
21
- end
22
- end
23
-
24
- describe "with a Socket::PF_UNIX family" do
25
- it "creates a socket with a :DGRAM type specifier" do
26
- @socket = Socket.new Socket::PF_UNIX, "SOCK_DGRAM", 0
27
- @socket.should be_an_instance_of(Socket)
28
- end
29
-
30
- it "creates a socket with a :STREAM type specifier" do
31
- @socket = Socket.new Socket::PF_UNIX, "SOCK_STREAM", 0
32
- @socket.should be_an_instance_of(Socket)
33
- end
34
- end
35
-
36
- it "calls #to_str to convert the family to a String" do
37
- family = mock("socket new family")
38
- family.should_receive(:to_str).and_return("PF_UNIX")
39
- @socket = Socket.new family, "SOCK_STREAM", 0
40
- @socket.should be_an_instance_of(Socket)
41
- end
42
-
43
- it "raises a TypeError if #to_str does not return a String" do
44
- family = mock("socket new family")
45
- family.should_receive(:to_str).and_return(1)
46
- lambda { @socket = Socket.new family, "SOCK_STREAM", 0 }.should raise_error(TypeError)
47
- end
48
-
49
- ruby_version_is ""..."1.9" do
50
- it "raises an Errno::EPROTONOSUPPORT if socket type is not a string or integer" do
51
- lambda { Socket.new(Socket::PF_UNIX, :DGRAM, 0) }.should raise_error(Errno::EPROTONOSUPPORT)
52
- end
53
- end
54
-
55
- ruby_version_is "1.9" do
56
- it "raises a SocketError if given symbol is not a Socket constants reference" do
57
- lambda { Socket.new(Socket::PF_UNIX, :NO_EXIST, 0) }.should raise_error(SocketError)
58
- end
59
-
60
- it "creates a socket with an :INET family specifier" do
61
- @socket = Socket.new :INET, :STREAM
62
- @socket.should be_an_instance_of(Socket)
63
- end
64
-
65
- it "creates a socket with an 'INET' family specifier" do
66
- @socket = Socket.new "INET", :STREAM
67
- @socket.should be_an_instance_of(Socket)
68
- end
69
-
70
- it "creates a socket with a :UNIX family specifier" do
71
- @socket = Socket.new :UNIX, :STREAM
72
- @socket.should be_an_instance_of(Socket)
73
- end
74
-
75
- it "creates a socket with a 'UNIX' family specifier" do
76
- @socket = Socket.new "UNIX", :STREAM
77
- @socket.should be_an_instance_of(Socket)
78
- end
79
-
80
- describe "with an :INET family" do
81
- it "creates a socket with a :DGRAM type specifier" do
82
- @socket = Socket.new :INET, :DGRAM
83
- @socket.should be_an_instance_of(Socket)
84
- end
85
-
86
- it "creates a socket with a :STREAM type specifier" do
87
- @socket = Socket.new :INET, :STREAM
88
- @socket.should be_an_instance_of(Socket)
89
- end
90
- end
91
-
92
- describe "with a :UNIX family" do
93
- it "creates a socket with a :DGRAM type specifier" do
94
- @socket = Socket.new :UNIX, :DGRAM
95
- @socket.should be_an_instance_of(Socket)
96
- end
97
-
98
- it "creates a socket with a :STREAM type specifier" do
99
- @socket = Socket.new :UNIX, :STREAM
100
- @socket.should be_an_instance_of(Socket)
101
- end
102
- end
103
-
104
- it "accepts an optional protocol parameter" do
105
- @socket = Socket.new Socket::PF_UNIX, Socket::SOCK_DGRAM, 0
106
- @socket.should be_an_instance_of(Socket)
107
- end
108
- end
109
- end
@@ -1,6 +0,0 @@
1
- require File.expand_path('../../fixtures/classes', __FILE__)
2
- require File.expand_path('../../shared/pack_sockaddr', __FILE__)
3
-
4
- describe "Socket#pack_sockaddr_in" do
5
- it_behaves_like :socket_pack_sockaddr_in, :pack_sockaddr_in
6
- end
@@ -1,6 +0,0 @@
1
- require File.expand_path('../../fixtures/classes', __FILE__)
2
- require File.expand_path('../../shared/pack_sockaddr', __FILE__)
3
-
4
- describe "Socket#pack_sockaddr_un" do
5
- it_behaves_like :socket_pack_sockaddr_un, :pack_sockaddr_un
6
- end
@@ -1,6 +0,0 @@
1
- require File.expand_path('../../fixtures/classes', __FILE__)
2
- require File.expand_path('../../shared/socketpair', __FILE__)
3
-
4
- describe "Socket#pair" do
5
- it_behaves_like :socket_socketpair, :pair
6
- end
@@ -1 +0,0 @@
1
- require File.expand_path('../../fixtures/classes', __FILE__)
@@ -1 +0,0 @@
1
- require File.expand_path('../../fixtures/classes', __FILE__)
@@ -1,6 +0,0 @@
1
- require File.expand_path('../../fixtures/classes', __FILE__)
2
- require File.expand_path('../../shared/pack_sockaddr', __FILE__)
3
-
4
- describe "Socket#sockaddr_in" do
5
- it_behaves_like :socket_pack_sockaddr_in, :sockaddr_in
6
- end
@@ -1,6 +0,0 @@
1
- require File.expand_path('../../fixtures/classes', __FILE__)
2
- require File.expand_path('../../shared/pack_sockaddr', __FILE__)
3
-
4
- describe "Socket#sockaddr_un" do
5
- it_behaves_like :socket_pack_sockaddr_un, :sockaddr_un
6
- end
@@ -1,37 +0,0 @@
1
- require File.expand_path('../../fixtures/classes', __FILE__)
2
-
3
- describe "Socket" do
4
- it "inherits from BasicSocket and IO" do
5
- Socket.superclass.should == BasicSocket
6
- BasicSocket.superclass.should == IO
7
- end
8
- end
9
-
10
- describe "The socket class hierarchy" do
11
- it "has an IPSocket in parallel to Socket" do
12
- Socket.ancestors.include?(IPSocket).should == false
13
- IPSocket.ancestors.include?(Socket).should == false
14
- IPSocket.superclass.should == BasicSocket
15
- end
16
-
17
- it "has TCPSocket and UDPSocket subclasses of IPSocket" do
18
- TCPSocket.superclass.should == IPSocket
19
- UDPSocket.superclass.should == IPSocket
20
- end
21
-
22
- not_supported_on :jruby, :windows do
23
- it "has a UNIXSocket in parallel to Socket" do
24
- Socket.ancestors.include?(UNIXSocket).should == false
25
- UNIXSocket.ancestors.include?(Socket).should == false
26
- UNIXSocket.superclass.should == BasicSocket
27
- end
28
- end
29
- end
30
-
31
- not_supported_on :jruby, :windows do
32
- describe "Server class hierarchy" do
33
- it "contains UNIXServer" do
34
- UNIXServer.superclass.should == UNIXSocket
35
- end
36
- end
37
- end
@@ -1,6 +0,0 @@
1
- require File.expand_path('../../fixtures/classes', __FILE__)
2
- require File.expand_path('../../shared/socketpair', __FILE__)
3
-
4
- describe "Socket#socketpair" do
5
- it_behaves_like :socket_socketpair, :socketpair
6
- end
@@ -1 +0,0 @@
1
- require File.expand_path('../../fixtures/classes', __FILE__)
@@ -1,16 +0,0 @@
1
- require File.expand_path('../../fixtures/classes', __FILE__)
2
- require 'socket'
3
-
4
- describe "Socket#unpack_sockaddr_in" do
5
-
6
- it "decodes the host name and port number of a packed sockaddr_in" do
7
- sockaddr = Socket.sockaddr_in SocketSpecs.port, '127.0.0.1'
8
- Socket.unpack_sockaddr_in(sockaddr).should == [SocketSpecs.port, '127.0.0.1']
9
- end
10
-
11
- it "raises an ArgumentError when the sin_family is not AF_INET" do
12
- sockaddr = Socket.sockaddr_un '/tmp/x'
13
- lambda { Socket.unpack_sockaddr_in sockaddr }.should raise_error(ArgumentError)
14
- end
15
-
16
- end
@@ -1,2 +0,0 @@
1
- require File.expand_path('../../../../spec_helper', __FILE__)
2
- require File.expand_path('../../fixtures/classes', __FILE__)
@@ -1,30 +0,0 @@
1
- require File.expand_path('../../fixtures/classes', __FILE__)
2
-
3
- describe "Socket::TCPServer.accept_nonblock" do
4
- before :each do
5
- @server = TCPServer.new("127.0.0.1", SocketSpecs.port)
6
- end
7
-
8
- after :each do
9
- @server.close
10
- end
11
-
12
- it "accepts non blocking connections" do
13
- @server.listen(5)
14
- lambda { @server.accept_nonblock}.should raise_error(Errno::EAGAIN)
15
-
16
- c = TCPSocket.new("127.0.0.1", SocketSpecs.port)
17
- sleep 0.1
18
- s = @server.accept_nonblock
19
-
20
- # commenting while we get some input on the current JRuby situation
21
- # port, address = Socket.unpack_sockaddr_in(s.getsockname)
22
-
23
- # port.should == SocketSpecs.port
24
- # address.should == "127.0.0.1"
25
- s.should be_kind_of(TCPSocket)
26
-
27
- c.close
28
- s.close
29
- end
30
- end
@@ -1,60 +0,0 @@
1
- require File.expand_path('../../fixtures/classes', __FILE__)
2
-
3
-
4
- describe "TCPServer#accept" do
5
- before :each do
6
- @server = TCPServer.new("127.0.0.1", SocketSpecs.port)
7
- end
8
-
9
- after :each do
10
- @server.close unless @server.closed?
11
- end
12
-
13
- it "accepts a connection and returns a TCPSocket" do
14
- data = nil
15
- t = Thread.new do
16
- client = @server.accept
17
- client.should be_kind_of(TCPSocket)
18
- data = client.read(5)
19
- client << "goodbye"
20
- client.close
21
- end
22
- Thread.pass while t.status and t.status != "sleep"
23
-
24
- socket = TCPSocket.new('127.0.0.1', SocketSpecs.port)
25
- socket.write('hello')
26
- socket.shutdown(1) # we are done with sending
27
- socket.read.should == 'goodbye'
28
- t.join
29
- data.should == 'hello'
30
- socket.close
31
- end
32
-
33
- it "can be interrupted by Thread#kill" do
34
- t = Thread.new { @server.accept }
35
-
36
- Thread.pass while t.status and t.status != "sleep"
37
-
38
- # kill thread, ensure it dies in a reasonable amount of time
39
- t.kill
40
- a = 1
41
- while a < 2000
42
- break unless t.alive?
43
- Thread.pass
44
- sleep 0.2
45
- a += 1
46
- end
47
- a.should < 2000
48
- end
49
-
50
- it "can be interrupted by Thread#raise" do
51
- t = Thread.new { @server.accept }
52
-
53
- Thread.pass while t.status and t.status != "sleep"
54
-
55
- # raise in thread, ensure the raise happens
56
- ex = Exception.new
57
- t.raise ex
58
- lambda { t.join }.should raise_error(Exception)
59
- end
60
- end