[ https://issues.apache.org/jira/browse/THRIFT-5327?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17283819#comment-17283819 ]
Paolo Elefante edited comment on THRIFT-5327 at 2/12/21, 4:46 PM: ------------------------------------------------------------------ Hi guys, I see the problem in the C++ method TSocket::getPeerHost(). In details, getPeerHost invokes the API getnameinfo that unfortunately, in case of DNS misconfigurations, hangs for several seconds and returns an error that is ignored. I think this part of code of getPeerHost() can be handled differently: {code:java} char clienthost[NI_MAXHOST]; char clientservice[NI_MAXSERV]; getnameinfo((sockaddr*)addrPtr, addrLen, clienthost, sizeof(clienthost), clientservice, sizeof(clientservice), 0); peerHost_ = clienthost; {code} In case getnameinfo returns any error peerHost_ cannot be set. This is the reason why getOrigin return dirty characters: when the DNS problem happens (because of Temporary failure in name resolution), peerHost_ is set to the uninitalized buffer clienthost. The class TSSLSocket is also affected by this. BR, Paolo was (Author: paolo.elefante): Hi guys, I see the problem in the C++ method TSocket::getPeerHost(). In details, getPeerHost invokes the API getnameinfo that unfortunately, in case of DNS misconfigurations, hangs for several seconds and returns an error that is ignored. I thing this part of code of getPeerHost() can be handled differently: {code:java} char clienthost[NI_MAXHOST]; char clientservice[NI_MAXSERV]; getnameinfo((sockaddr*)addrPtr, addrLen, clienthost, sizeof(clienthost), clientservice, sizeof(clientservice), 0); peerHost_ = clienthost; {code} In case getnameinfo returns any error peerHost_ cannot be set. The class TSSLSocket is also affected by this behavior. BR, Paolo > ServerHello is sent with a delay from thrift > -------------------------------------------- > > Key: THRIFT-5327 > URL: https://issues.apache.org/jira/browse/THRIFT-5327 > Project: Thrift > Issue Type: Bug > Components: C++ - Library > Affects Versions: 0.13.0 > Environment: C++ Application running on linux x86_64 > Reporter: A.Hari Venkata Ramana > Priority: Major > > I have a C++ environment which uses thrift for server. Server is of type > TThreadPoolServer with TBufferedTransportFactory as transport and > TBinaryProtocolFactory as protocol. Clients get connected to this server and > this happens via TLS. We are using thrift server with version 0.13.0 on the > server end. > > In one of the environments where a client using thrift (version 0.10.0), the > client Hello is sent as part of initial TLS negotiation. We have observed > that the server Hello is sent after around 25-30 seconds after the client > Hello is received by the server. > > In these cases where delay is observed on server end we are printing the > client origin details, ie., the server ip of client and the port from which > it is connecting to the server. > > functionXXX(const ::apache::thrift::TConnectionInfo& connInfo){ > std::string origin = connInfo.input->getInputTransport()->*getOrigin*(); > printf("CONNECTED: %s\n", origin.c_str() ); > > .......} > In cases where the ServerHello is delayed from thrift, we see the junk > characters in prints from the above code as shown below: > > { Info = "CONNECTED: ����:52089"} > > { Info = "CONNECTED: ����:52465"} > { Info = "CONNECTED: ����:55027"} > { Info = "CONNECTED: ����:59066"} > In cases where the IP address of the client is shown as normal characters (as > shown below) we dont see any delay in the serverHello sent from the thrift > server and it just takes few milli seconds to send the serverHello back to > client. > > \{ Info = "CONNECTED: 172.30.1.41:46573"} > > Looking at the change history we see the following change done in thrift > 0.13.0: > > - [THRIFT-4762](https://issues.apache.org/jira/browse/THRIFT-4762) - cpp: > TTransport::getOrigin() is now const > > Could this be the cause of the delay from the thrift server in sending the > Server Hello back to clients as part of TLS negotiation? > > Any pointers here would be very useful. > -- This message was sent by Atlassian Jira (v8.3.4#803005)