protoplasm-blocking-client 0.1.7 → 0.1.8

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.
@@ -28,14 +28,28 @@ module Protoplasm
28
28
  raise "Must be implemented by the client class"
29
29
  end
30
30
 
31
- def _socket
31
+ def _socket(timeout = 5)
32
32
  count = 0
33
33
  begin
34
34
  host, port = host_port
35
35
  @socket ||= begin
36
- s = TCPSocket.open(host, port)
37
- s.setsockopt(Socket::SOL_SOCKET, Socket::SO_KEEPALIVE, true)
38
- s
36
+ addr = Socket.getaddrinfo(host, nil)
37
+ sock = Socket.new(Socket.const_get(addr[0][0]), Socket::SOCK_STREAM, 0)
38
+
39
+ if timeout
40
+ secs = Integer(timeout)
41
+ usecs = Integer((timeout - secs) * 1_000_000)
42
+ optval = [secs, usecs].pack("l_2")
43
+ begin
44
+ io.setsockopt Socket::SOL_SOCKET, Socket::SO_RCVTIMEO, optval
45
+ io.setsockopt Socket::SOL_SOCKET, Socket::SO_SNDTIMEO, optval
46
+ rescue Exception => ex
47
+ # Solaris, for one, does not like/support socket timeouts.
48
+ @logger.info "[memcache-client] Unable to use raw socket timeouts: #{ex.class.name}: #{ex.message}" if @logger
49
+ end
50
+ end
51
+ sock.connect(Socket.pack_sockaddr_in(port, addr[0][3]))
52
+ sock
39
53
  end
40
54
  yield @socket if block_given?
41
55
  rescue Errno::EPIPE, Errno::ECONNRESET
@@ -74,7 +88,7 @@ module Protoplasm
74
88
  while data.size < len
75
89
  data << socket.sysread([len - data.size, 4096].min)
76
90
  end
77
- obj = type.response_class.decode(data)
91
+ obj = type.response_class.decode(data.force_encoding('BINARY'))
78
92
  yield obj if block_given?
79
93
  end
80
94
  fetch_objects = false unless type.streaming?
@@ -74,6 +74,7 @@ module Protoplasm
74
74
  obj = type.response_class.new(*args)
75
75
  s = ''
76
76
  obj.encode(s)
77
+ s = s.force_encoding('BINARY')
77
78
  send_data [Types::Response::NORMAL].pack("C")
78
79
  send_data [s.size].pack("Q")
79
80
  send_data s
@@ -1,3 +1,3 @@
1
1
  module Protoplasm
2
- VERSION = "0.1.7"
2
+ VERSION = "0.1.8"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: protoplasm-blocking-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-07 00:00:00.000000000 Z
12
+ date: 2012-02-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: beefcake
16
- requirement: &70261509759800 !ruby/object:Gem::Requirement
16
+ requirement: &70252190527900 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 0.3.7
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70261509759800
24
+ version_requirements: *70252190527900
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rake
27
- requirement: &70261509734540 !ruby/object:Gem::Requirement
27
+ requirement: &70252190527480 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70261509734540
35
+ version_requirements: *70252190527480
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: minitest
38
- requirement: &70261509732840 !ruby/object:Gem::Requirement
38
+ requirement: &70252190526940 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: 2.6.1
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70261509732840
46
+ version_requirements: *70252190526940
47
47
  description: A blocking client for a Protoplasm server.
48
48
  email:
49
49
  - joshbuddy@gmail.com
@@ -76,18 +76,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
76
76
  - - ! '>='
77
77
  - !ruby/object:Gem::Version
78
78
  version: '0'
79
- segments:
80
- - 0
81
- hash: 1383266986143059275
82
79
  required_rubygems_version: !ruby/object:Gem::Requirement
83
80
  none: false
84
81
  requirements:
85
82
  - - ! '>='
86
83
  - !ruby/object:Gem::Version
87
84
  version: '0'
88
- segments:
89
- - 0
90
- hash: 1383266986143059275
91
85
  requirements: []
92
86
  rubyforge_project: protoplasm-blocking-client
93
87
  rubygems_version: 1.8.15
@@ -97,3 +91,4 @@ summary: A blocking client for a Protoplasm server
97
91
  test_files:
98
92
  - test/protoplasm_test.rb
99
93
  - test/test_helper.rb
94
+ has_rdoc: