dango 0.4.6 → 0.4.7

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.
@@ -56,10 +56,12 @@ class DangoFrameworkTimeoutException < DangoFrameworkException; end
56
56
  class DangoFrameworkConnectionException < DangoFrameworkException; end
57
57
  class DangoFrameworkDisconnectException < DangoFrameworkException; end
58
58
  class DangoFrameworkReadNoDataException < DangoFrameworkException; end
59
+ class DangoFrameworkReadTimeoutException < DangoFrameworkException; end
59
60
  class DangoFrameworkFlashPolicyException < DangoFrameworkException; end
60
61
  class DangoFrameworkMonitorSecurityException < DangoFrameworkException; end
61
62
  class DangoFrameworkTransactionException < DangoFrameworkException; end
62
63
 
64
+
63
65
  # エラー出力用モジュール
64
66
  module ErrorMessage
65
67
  # デバッグ出力用のメソッド
@@ -114,6 +116,8 @@ module DangoFrameworkModule
114
116
 
115
117
  DefaultEncodeType = EncodeTypeJSON # デフォルトのエンコードのタイプ
116
118
 
119
+ ReadTimeoutSec = 10.0 # データ受信のタイムアウト秒数
120
+
117
121
 
118
122
  # デバッグ出力用のメソッド
119
123
  def debug_print(str)
@@ -161,6 +165,7 @@ module DangoFrameworkModule
161
165
 
162
166
  # データ受信処理
163
167
  def dango_receive_data(sock)
168
+ logger.debug "dango_receive_data:start:sock=#{sock}"
164
169
  ret_data = ""
165
170
 
166
171
  begin
@@ -202,17 +207,22 @@ module DangoFrameworkModule
202
207
 
203
208
  ret_data_orig = ""
204
209
 
205
- while size > 0
206
- read_len = MaxLenRecv > size ? size : MaxLenRecv
207
- begin
208
- this_ret_data_orig = sock.recv(read_len)
209
- rescue
210
- raise(DangoFrameworkConnectionException, "failed to read sock(data).\n#{error_message($!, 'u')}")
211
- end
212
-
213
- ret_data_orig += this_ret_data_orig
210
+ # 10秒でタイムアウトを起こす
211
+ timeout(ReadTimeoutSec, DangoFrameworkReadTimeoutException) do
214
212
 
215
- size -= this_ret_data_orig.size
213
+ # サイズが0になるまで受信し続ける
214
+ while size > 0
215
+ read_len = MaxLenRecv > size ? size : MaxLenRecv
216
+ begin
217
+ this_ret_data_orig = sock.recv(read_len)
218
+ rescue
219
+ raise(DangoFrameworkConnectionException, "failed to read sock(data).\n#{error_message($!, 'u')}")
220
+ end
221
+
222
+ ret_data_orig += this_ret_data_orig
223
+
224
+ size -= this_ret_data_orig.size
225
+ end
216
226
  end
217
227
 
218
228
  ret_data = dango_receive_decrypt(ret_data_orig[0..-2])
@@ -72,7 +72,7 @@ class DangoServerFramework
72
72
 
73
73
  def exit_process() # プロセス終了処理
74
74
  debug_print("shutdown")
75
- if @is_pid_file_create
75
+ if @is_pid_file_create_time == File.mtime(@pid_file)
76
76
  begin
77
77
  File.delete(@pid_file)
78
78
  rescue
@@ -89,7 +89,7 @@ class DangoServerFramework
89
89
  @gserver = nil # Gserver用の変数
90
90
  @server_reload = nil # サーバーのリロード用フラグ
91
91
 
92
- @is_pid_file_create = nil # pidファイルを作ったかどうかのフラグ
92
+ @is_pid_file_create_time = nil # pidファイルを作ったかどうかのフラグ
93
93
 
94
94
  # SIGINT の捕捉
95
95
  Signal.trap(:INT) do
@@ -187,7 +187,7 @@ class DangoServerFramework
187
187
 
188
188
  GC.disable
189
189
  open(@pid_file, "wb"){|fh| fh.write Process.pid.to_s } # pidをファイルに保存
190
- @is_pid_file_create = true # pidファイルを作ったことを記録
190
+ @is_pid_file_create_time = File.mtime(@pid_file) # pidファイルを作ったことを記録
191
191
 
192
192
  # @gserver.start(@server_max_connections)
193
193
  @gserver.start(@server_max_connections, 20) # backlogを20に設定
@@ -333,11 +333,11 @@ class DangoServerFramework
333
333
  do_flash_policy_file(sid, sock)
334
334
 
335
335
  # この部分はポリシーファイルを返す設定に関係なく実行する部分
336
- sleep 0.1
336
+ # sleep 0.1
337
337
  raise(DangoFrameworkFlashPolicyException, "requested policy file. disconnectiong...")
338
338
 
339
339
  elsif ret_objs == [] # 受信データがなければ
340
- # logger.debug "ret_objs is empty. "
340
+ logger.debug "ret_objs is empty. "
341
341
 
342
342
  else # 受信データがあれば
343
343
  ret_objs.each do |ret_obj| # 受信データループ
@@ -413,6 +413,10 @@ class DangoServerFramework
413
413
  @recv_fail_count += 1 if @recv_fail_count # 受信失敗回数カウント
414
414
  logger.debug "read no data. maybe client closed. #{sid} "
415
415
 
416
+ rescue DangoFrameworkReadTimeoutException
417
+ @recv_fail_count += 1 if @recv_fail_count # 受信失敗回数カウント
418
+ logger.debug "read timeout error. #{sid} \n#{error_message($!, 'u')}"
419
+
416
420
  rescue DangoFrameworkConnectionException
417
421
  @recv_fail_count += 1 if @recv_fail_count # 受信失敗回数カウント
418
422
  logger.debug "connection error. #{sid} \n#{error_message($!, 'u')}"
@@ -2,7 +2,7 @@ module Dango #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 4
5
- TINY = 6
5
+ TINY = 7
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dango
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.6
4
+ version: 0.4.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Keisuke Minami
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-10-04 00:00:00 +09:00
12
+ date: 2008-10-07 00:00:00 +09:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -28,9 +28,9 @@ dependencies:
28
28
  version_requirement:
29
29
  version_requirements: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "="
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 0.4.6
33
+ version: "0"
34
34
  version:
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: hoe