net-ping 1.6.2 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MWEzZmUxOTg3ZmRmY2E1MDA5ZmNmZTdlMzk1ZGQ2NTM1NTkyMTM5Ng==
4
+ ZTJmYTMzNzE5ZjJkYTIwYjk4NWI2YTZhNGIxZmJkNDU0NjEzZmQwZA==
5
5
  data.tar.gz: !binary |-
6
- YzcwNTFlYzg0MzRlZjJhNjg2ZGMwYzg0ODBlMzQ0NTlhNTNhMjA5YQ==
6
+ NDk5MzhkOWIwZDI2MDU5MmZiOWIxYjljZGFmNDcxZWQxMTIzOTczMw==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- MzQ3NDg1MzEzNTJiNDdlMjgxNzZiMDlhZDI5MzM0MzdmMDllOGU3NTBhYjgy
10
- MDM1ZDU1MWJiMzYwYjZmZGU3NDAxZWQ4YzY1YzBlODkyNWRiMWExOTU4MjA2
11
- MDkwMmQ0NDk1M2VjYWNlMDZlMGUyODM2NTUzNmFmNDAxYTY1Nzg=
9
+ ZmMxMDk1OGEwYjdhNWY0NzhlOTE3Yzc4YjAyNTIzYWQxYmU3ZDJiN2RkZWNh
10
+ MzAwNGZmMTYwMWNlNmVmOTk1ZjQzOTI4Mjk1M2VjMmIwZDFkYjk5MmNkNTk1
11
+ MjI4NGVkMjU2YzZlMDYxYTE0NGRjOGE0ZjJjYTZkZTk2ZWRhYjg=
12
12
  data.tar.gz: !binary |-
13
- ZGMxYjU3MjI3ZjM1OGNmMzc2NTg4NGI0YWI4MTEzNzU2YWJlOWI3OThjN2Zi
14
- OWEyYTEyNTdlM2I4NjFiYmUwYWJjZWNmYTE3ZmNhMThlMmViNDY5NjIxZGNl
15
- MTJmYjc0YjU5MTBhNjlhN2QwOWM1NDYwM2VhNjg1MzBkZjc0YTI=
13
+ YzFmZjVhYzhjZDQ5YjBhN2I0Yjg5NGM4ZDQ2ZWQyNWM2YWYyZWRiZDQ2ODUy
14
+ OWNlOTAyYjUxOTBlZGVhMTIxNWI4MmFhN2ZlMTQ3NGZlYjhlMDQzOTJhNmE2
15
+ NDRjNzBhOTJmZmU3ODM2MjRmZjBhODZiZTI3NTMwMjY1Y2QyYmM=
data/CHANGES CHANGED
@@ -1,3 +1,10 @@
1
+ == 1.7.0 - 25-Aug-2013
2
+ * Now requires Ruby 1.9.x or later.
3
+ * Replaced the main ping code for the Ping::TCP class. The timeout module
4
+ really doesn't work very well with sockets, and so a raw socket approach
5
+ combined with IO.select is now used instead.
6
+ * Updates to the doc/ping.txt file.
7
+
1
8
  == 1.6.2 - 8-Aug-2013
2
9
  * Fixed a bug in the ICMP ping helper module. Thanks go to Yuichi
3
10
  Tsunematsu for the spot.
data/doc/ping.txt CHANGED
@@ -48,7 +48,7 @@
48
48
  All Ping classes are children of the Ping parent class (which should
49
49
  never be instantiated directly).
50
50
 
51
- The Ping::ICMP class requires root privileges on UNIX systems.
51
+ The Ping::ICMP class requires root/administrative privileges.
52
52
 
53
53
  The Ping::WMI class only works on MS Windows.
54
54
 
@@ -136,30 +136,6 @@ Ping::WMI#ping(host, options={})
136
136
  Ping::WMI#ping?(host, options={})
137
137
  Returns whether or not the ping succeeded.
138
138
 
139
- == Ping::LDAP
140
- Ping::LDAP.new(uri=nil, timeout=5)
141
- Performs a 'ping' to an LDAP server in the form of either an anonymous
142
- or an authenticated LDAP bind.
143
- Identical to Net::Ping.new except that, instead of a host, the first
144
- argument is a URI.
145
- The default +timeout+ is 5 seconds.
146
-
147
- +uri+ string is expected to be a full URI with scheme (ldap/ldaps)
148
- and optionally the port (else default port is assumed) e.g.
149
- ldap://my.ldap.host.com
150
- ldap://my.ldap.host.com:1389
151
- ldaps://my.ldap.host.com
152
- ldaps://my.ldap.host.com:6636
153
-
154
- If a plain hostname is provided as the +uri+, a default port of 389 is assumed
155
-
156
- Ping::LDAP#encryption
157
- Set/get the encyption method. By default is nil, but may be set to :simple_tls
158
-
159
- Ping::LDAP#username
160
- Ping::LDAP#password
161
- set/get the username and password for ping using and authenticated bind.
162
-
163
139
  = Common Instance Methods
164
140
  Ping#exception
165
141
  Returns the error string that was set if a ping call failed. If an exception
@@ -242,10 +218,6 @@ Ping#warning
242
218
  You may see a test failure from the test_net_ping_tcp test case. You can
243
219
  ignore these.
244
220
 
245
- The socket library that ships with the Windows One-Click installer has
246
- known issues. This may cause the Ping::ICMP class to fail. In fact, I
247
- make an effort to skip those tests if I detect the one-click installer.
248
-
249
221
  UDP pings may not work with older versions of Ruby 1.9.x.
250
222
 
251
223
  Please report any bugs on the project page at
@@ -263,7 +235,7 @@ Ping#warning
263
235
  Artistic 2.0
264
236
 
265
237
  = Copyright
266
- (C) 2003-2010 Daniel J. Berger, All Rights Reserved
238
+ (C) 2003-2013 Daniel J. Berger, All Rights Reserved
267
239
 
268
240
  = Warranty
269
241
  This package is provided "as is" and without any express or
data/lib/net/ping/ping.rb CHANGED
@@ -10,7 +10,7 @@ module Net
10
10
  #
11
11
  class Ping
12
12
  # The version of the net-ping library.
13
- VERSION = '1.6.2'
13
+ VERSION = '1.7.0'
14
14
 
15
15
  # The host to ping. In the case of Ping::HTTP, this is the URI.
16
16
  attr_accessor :host
data/lib/net/ping/tcp.rb CHANGED
@@ -11,14 +11,14 @@ module Net
11
11
 
12
12
  # Returns whether or not Errno::ECONNREFUSED is considered a successful
13
13
  # ping. The default is false.
14
- #
14
+ #
15
15
  def self.service_check
16
16
  @@service_check
17
17
  end
18
18
 
19
19
  # Sets whether or not an Errno::ECONNREFUSED should be considered a
20
20
  # successful ping.
21
- #
21
+ #
22
22
  def self.service_check=(bool)
23
23
  unless bool.kind_of?(TrueClass) || bool.kind_of?(FalseClass)
24
24
  raise ArgumentError, 'argument must be true or false'
@@ -29,38 +29,58 @@ module Net
29
29
  # This method attempts to ping a host and port using a TCPSocket with
30
30
  # the host, port and timeout values passed in the constructor. Returns
31
31
  # true if successful, or false otherwise.
32
- #
32
+ #
33
33
  # Note that, by default, an Errno::ECONNREFUSED return result will be
34
34
  # considered a failed ping. See the documentation for the
35
35
  # Ping::TCP.service_check= method if you wish to change this behavior.
36
- #
36
+ #
37
37
  def ping(host=@host)
38
38
  super(host)
39
39
 
40
40
  bool = false
41
- tcp = nil
42
41
  start_time = Time.now
43
42
 
43
+ # Failure here most likely means bad host, so just bail.
44
44
  begin
45
- Timeout.timeout(@timeout){
46
- begin
47
- tcp = TCPSocket.new(host, @port)
48
- rescue Errno::ECONNREFUSED => err
49
- if @@service_check
50
- bool = true
51
- else
52
- @exception = err
53
- end
54
- rescue Exception => err
55
- @exception = err
56
- else
45
+ addr = Socket.getaddrinfo(host, port)
46
+ rescue SocketError => err
47
+ @exception = err
48
+ bool = false
49
+ return
50
+ end
51
+
52
+ begin
53
+ # Where addr[0][0] is likely AF_INET.
54
+ sock = Socket.new(Socket.const_get(addr[0][0]), Socket::SOCK_STREAM, 0)
55
+
56
+ # This may not be entirely necessary
57
+ sock.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
58
+
59
+ begin
60
+ # Where addr[0][3] is an IP address
61
+ sock.connect_nonblock(Socket.pack_sockaddr_in(port, addr[0][3]))
62
+ rescue Errno::EINPROGRESS
63
+ # No-op, continue below
64
+ rescue Exception => err
65
+ # Something has gone horribly wrong
66
+ @exception = err
67
+ return false
68
+ end
69
+
70
+ resp = IO.select(nil, [sock], nil, timeout)
71
+
72
+ # Assume ECONNREFUSED at this point
73
+ if resp.nil?
74
+ if @@service_check
57
75
  bool = true
76
+ else
77
+ @exception = Errno::ECONNREFUSED
58
78
  end
59
- }
60
- rescue Timeout::Error => err
61
- @exception = err
79
+ else
80
+ bool = true
81
+ end
62
82
  ensure
63
- tcp.close if tcp
83
+ sock.close if sock
64
84
  end
65
85
 
66
86
  # There is no duration if the ping failed
@@ -71,13 +91,13 @@ module Net
71
91
 
72
92
  alias ping? ping
73
93
  alias pingecho ping
74
-
94
+
75
95
  # Class method aliases. DEPRECATED.
76
96
  class << self
77
97
  alias econnrefused service_check
78
98
  alias econnrefused= service_check=
79
99
  alias ecr service_check
80
- alias ecr= service_check=
100
+ alias ecr= service_check=
81
101
  end
82
102
  end
83
103
  end
data/net-ping.gemspec CHANGED
@@ -3,7 +3,7 @@ require 'rbconfig'
3
3
 
4
4
  Gem::Specification.new do |spec|
5
5
  spec.name = 'net-ping'
6
- spec.version = '1.6.2'
6
+ spec.version = '1.7.0'
7
7
  spec.license = 'Artistic 2.0'
8
8
  spec.author = 'Daniel J. Berger'
9
9
  spec.email = 'djberg96@gmail.com'
@@ -15,6 +15,9 @@ Gem::Specification.new do |spec|
15
15
  spec.rubyforge_project = 'shards'
16
16
  spec.extra_rdoc_files = ['README', 'CHANGES', 'doc/ping.txt']
17
17
 
18
+ # The TCP Ping class requires this for non-blocking sockets.
19
+ spec.required_ruby_version = ">= 1.9.1"
20
+
18
21
  spec.add_dependency('ffi', '>= 1.0.0')
19
22
 
20
23
  spec.add_development_dependency('test-unit', '>= 2.5.0')
@@ -28,7 +28,7 @@ end
28
28
 
29
29
  class TC_Net_Ping < Test::Unit::TestCase
30
30
  def test_net_ping_version
31
- assert_equal('1.6.2', Net::Ping::VERSION)
31
+ assert_equal('1.7.0', Net::Ping::VERSION)
32
32
  end
33
33
  end
34
34
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: net-ping
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.2
4
+ version: 1.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel J. Berger
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-08 00:00:00.000000000 Z
11
+ date: 2013-08-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
@@ -115,7 +115,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
115
115
  requirements:
116
116
  - - ! '>='
117
117
  - !ruby/object:Gem::Version
118
- version: '0'
118
+ version: 1.9.1
119
119
  required_rubygems_version: !ruby/object:Gem::Requirement
120
120
  requirements:
121
121
  - - ! '>='