[
https://issues.apache.org/jira/browse/HTTPCORE-149?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12573941#action_12573941
]
Oleg Kalnichevski commented on HTTPCORE-149:
--------------------------------------------
David
I am sorry I took me a while to make time for this issue. I am not sure this
behavior is wrong, though. Do you know if a write operation on a blocking
connection resets the last read time?
Oleg
> read timeouts do not respect start of request
> ---------------------------------------------
>
> Key: HTTPCORE-149
> URL: https://issues.apache.org/jira/browse/HTTPCORE-149
> Project: HttpComponents HttpCore
> Issue Type: Bug
> Components: HttpCore
> Affects Versions: 4.0-alpha6
> Environment: OSX 10.5.2
> java version "1.5.0_13"
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_13-b05-237)
> Java HotSpot(TM) Client VM (build 1.5.0_13-119, mixed mode, sharing)
> Reporter: David Koski
> Fix For: 4.0-beta2
>
>
> This code in BaseIOReactor
> protected void timeoutCheck(final SelectionKey key, long now) {
> Object attachment = key.attachment();
> if (attachment instanceof SessionHandle) {
> SessionHandle handle = (SessionHandle) key.attachment();
> IOSession session = handle.getSession();
> int timeout = session.getSocketTimeout();
> if (timeout > 0) {
> if (handle.getLastReadTime() + timeout < now) {
> is looking at the last read time. This will be the creation of the
> connection (if new) or the last time the session was used, if a keepalive
> connection. If what you connect to has relatively high idle times on its
> keepalive connections (say 60s) and you submit a request against it after it
> has been idle for 15 seconds, you lose 15 seconds off your actual timeout.
> For example, in my submitRequest:
> public HttpRequest submitRequest(final HttpContext context) {
> i set the read timeout on a per request basis:
> if (timeout != null) {
> connection.setSocketTimeout((int)
> timeout.getReadTimeout());
> }
> to, e.g. 120 s. My request is for this cgi:
> #!/bin/sh
> echo "content-type: text/plain"
> echo ""
> sleep 110
> ls
> If I use an existing session, this typically times out because it counts from
> the last read from the request.
> Further evidence, if I have the session and I reset the last read time in
> submitRequest(), it works correctly:
> try {
> final Field field =
> session.getClass().getDeclaredField("key");
> field.setAccessible(true);
> final SelectionKey key = (SelectionKey)
> field.get(session);
> final SessionHandle handle = (SessionHandle)
> key.attachment();
> handle.resetLastRead();
> } catch (final Exception e) {
> log.debug("unable to access key", e);
> }
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]