[ 
https://issues.apache.org/jira/browse/THRIFT-1892?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13605247#comment-13605247
 ] 

Ben Craig commented on THRIFT-1892:
-----------------------------------

I looked at the code, and timeouts are wrong for both connection timeouts 
(handled in config.h) and send / recv timeouts (handled in TSocket.cpp), but 
these two are wrong for different reasons, and it isn't as simple as 
milliseconds being treated as microseconds.

In config.h poll_win32 is turning a millisecond timeout "int" into a timeval 
structure, and doing so incorrectly.  It fills in the timeval via 
{timeout/1000, timeout*1000}, but should do something like {timeout/1000, 
(timeout%1000)*1000}.

For the send and recv timeouts, setsockopt is called with a timeval, but 
WinSock is expecting a DWORD of milliseconds.  I suspect it is using the 
seconds parameter of the structure instead, which would mean that the value is 
off by a factor of 1000, matching the behavior observed in the bug description.
                
> Socket timeouts are declared in milli-seconds, but are actually set in 
> micro-seconds
> ------------------------------------------------------------------------------------
>
>                 Key: THRIFT-1892
>                 URL: https://issues.apache.org/jira/browse/THRIFT-1892
>             Project: Thrift
>          Issue Type: Bug
>          Components: C++ - Library
>    Affects Versions: 0.9
>         Environment: Windows 8 x64
>            Reporter: Alexander
>            Priority: Minor
>              Labels: cpp, socket, timeout
>
> Socket timeouts are declared in milliseconds in TSocket.h:
>   /**
>    * Set the connect timeout
>    */
>   void setConnTimeout(int ms);
>   /**
>    * Set the receive timeout
>    */
>   void setRecvTimeout(int ms);
>   /**
>    * Set the send timeout
>    */
>   void setSendTimeout(int ms);
> But, when i set timeout which is supposed to be 5000 seconds, and make a call 
> to the service function that intentionally hangs, ETIMEDOUT exception occurs 
> precisely after 5 seconds.
>   socket->setConnTimeout(5*1000*1000);
>   socket->setRecvTimeout(5*1000*1000);
>   socket->setSendTimeout(5*1000*1000);

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to