protoplasm-blocking-client 0.1.7 → 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: