summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog12
-rw-r--r--lib/webrick/config.rb1
-rw-r--r--lib/webrick/server.rb10
3 files changed, 19 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index eba6883..c5d390e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+Tue Dec 18 23:27:51 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/webrick/server.rb (WEBrick::GenericServer#accept_client):
+ should rescue Errno::EINVAL from TCPServer#accept. this exception
+ might occur if the server socket is not in ready to listen.
+
+ * lib/webrick/server.rb (WEBrick::GenericServer#accept_client):
+ don't call TCPServer#close if the :ShutdownSocketWithoutClose is set.
+
+ * lib/webrick/config.rb (WEBrick::Config::General): add new parameter
+ :ShutdownSocketWithoutClose.
+
Tue Dec 18 22:51:47 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
* ext/openssl/lib/openssl/ssl.rb (OpenSSL::SSL::SSLServer#shutdown):
diff --git a/lib/webrick/config.rb b/lib/webrick/config.rb
index 10db6e0..121669c 100644
--- a/lib/webrick/config.rb
+++ b/lib/webrick/config.rb
@@ -34,6 +34,7 @@ module WEBrick
:StopCallback => nil,
:AcceptCallback => nil,
:DoNotReverseLookup => nil,
+ :ShutdownSocketWithoutClose => false,
}
# for HTTPServer, HTTPRequest, HTTPResponse ...
diff --git a/lib/webrick/server.rb b/lib/webrick/server.rb
index 3adbded..54375d2 100644
--- a/lib/webrick/server.rb
+++ b/lib/webrick/server.rb
@@ -129,7 +129,10 @@ module WEBrick
addr = s.addr
@logger.debug("close TCPSocket(#{addr[2]}, #{addr[1]})")
end
- s.close
+ s.shutdown
+ unless @config[:ShutdownSocketWithoutClose]
+ s.close
+ end
}
@listeners.clear
end
@@ -147,9 +150,8 @@ module WEBrick
sock.sync = true
Utils::set_non_blocking(sock)
Utils::set_close_on_exec(sock)
- rescue Errno::ECONNRESET, Errno::ECONNABORTED, Errno::EPROTO => ex
- # TCP connection was established but RST segment was sent
- # from peer before calling TCPServer#accept.
+ rescue Errno::ECONNRESET, Errno::ECONNABORTED,
+ Errno::EPROTO, Errno::EINVAL => ex
rescue Exception => ex
msg = "#{ex.class}: #{ex.message}\n\t#{ex.backtrace[0]}"
@logger.error msg