Skip to content

Commit

Permalink
[XrdCl] Socket: lazy initialize srv addr.
Browse files Browse the repository at this point in the history
  • Loading branch information
simonmichal committed Jan 26, 2021
1 parent beecc2c commit 3c64ccb
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 20 deletions.
2 changes: 1 addition & 1 deletion src/XrdCl/XrdClAsyncSocketHandler.cc
Expand Up @@ -344,7 +344,7 @@ namespace XrdCl
//--------------------------------------------------------------------------
pHandShakeData = new HandShakeData( pStream->GetURL(),
pSubStreamNum );
pHandShakeData->serverAddr = &pSocket->GetServerAddress();
pHandShakeData->serverAddr = pSocket->GetServerAddress();
pHandShakeData->clientName = pSocket->GetSockName();
pHandShakeData->streamName = pStreamName;

Expand Down
13 changes: 7 additions & 6 deletions src/XrdCl/XrdClSocket.cc
Expand Up @@ -42,7 +42,7 @@
namespace XrdCl
{
Socket::Socket( int socket, SocketStatus status ):
pSocket(socket), pStatus( status ), pServerAddr( 0 ),
pSocket(socket), pStatus( status ),
pProtocolFamily( AF_INET ),
pChannelID( 0 ),
pCorked( false )
Expand Down Expand Up @@ -215,7 +215,7 @@ namespace XrdCl
if( pSocket == -1 || pStatus == Connected || pStatus == Connecting )
return XRootDStatus( stError, errInvalidOp );

pServerAddr = addr;
pServerAddr.reset( new XrdNetAddr( addr ) );;

//--------------------------------------------------------------------------
// Make sure TLS is off when the physical connection is newly established
Expand All @@ -225,8 +225,8 @@ namespace XrdCl
//--------------------------------------------------------------------------
// Connect
//--------------------------------------------------------------------------
int status = XrdNetConnect::Connect( pSocket, pServerAddr.SockAddr(),
pServerAddr.SockSize(), timeout );
int status = XrdNetConnect::Connect( pSocket, pServerAddr->SockAddr(),
pServerAddr->SockSize(), timeout );
if( status != 0 )
{
XRootDStatus st( stError );
Expand Down Expand Up @@ -778,12 +778,13 @@ namespace XrdCl
// Enable encryption
//------------------------------------------------------------------------
XRootDStatus Socket::TlsHandShake( AsyncSocketHandler *socketHandler,
const std::string &thehost )
const std::string &thehost )
{
try
{
if( !pServerAddr ) return XRootDStatus( stError, errInvalidOp );
if( !pTls ) pTls.reset( new Tls( this, socketHandler ) );
return pTls->Connect( thehost, &pServerAddr );
return pTls->Connect( thehost, pServerAddr.get() );
}
catch( std::exception& ex )
{
Expand Down
26 changes: 13 additions & 13 deletions src/XrdCl/XrdClSocket.hh
Expand Up @@ -212,9 +212,9 @@ namespace XrdCl
//------------------------------------------------------------------------
//! Get the server address
//------------------------------------------------------------------------
const XrdNetAddr &GetServerAddress() const
const XrdNetAddr* GetServerAddress() const
{
return pServerAddr;
return pServerAddr.get();
}

//------------------------------------------------------------------------
Expand Down Expand Up @@ -302,17 +302,17 @@ namespace XrdCl
XRootDStatus Poll( bool readyForReading, bool readyForWriting,
int32_t timeout );

int pSocket;
SocketStatus pStatus;
XrdNetAddr pServerAddr;
mutable std::string pSockName; // mutable because it's for caching
mutable std::string pPeerName;
mutable std::string pName;
int pProtocolFamily;
AnyObject *pChannelID;
bool pCorked;

std::unique_ptr<Tls> pTls;
int pSocket;
SocketStatus pStatus;
std::unique_ptr<XrdNetAddr> pServerAddr;
mutable std::string pSockName; // mutable because it's for caching
mutable std::string pPeerName;
mutable std::string pName;
int pProtocolFamily;
AnyObject *pChannelID;
bool pCorked;

std::unique_ptr<Tls> pTls;
};
}

Expand Down

0 comments on commit 3c64ccb

Please sign in to comment.