Skip to content

Commit a14a527

Browse files
committed
[STR-3621] Add more logs while connecting
1 parent 14c77fe commit a14a527

2 files changed

Lines changed: 106 additions & 38 deletions

File tree

Socket/TCPClient.cpp

Lines changed: 101 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,47 @@
66

77
#include "TCPClient.h"
88

9+
namespace
10+
{
11+
12+
std::string SockAddrToString(struct sockaddr *pAddr)
13+
{
14+
if (pAddr == nullptr)
15+
{
16+
return {};
17+
}
18+
19+
static char s[INET6_ADDRSTRLEN > INET_ADDRSTRLEN ? INET6_ADDRSTRLEN : INET_ADDRSTRLEN] = "\0";
20+
21+
std::string strOut;
22+
switch (pAddr->sa_family)
23+
{
24+
case AF_INET: {
25+
struct sockaddr_in *pAddrIn = (struct sockaddr_in *)pAddr;
26+
27+
inet_ntop(AF_INET, &(pAddrIn->sin_addr), s, INET_ADDRSTRLEN);
28+
strOut += s;
29+
strOut += ':';
30+
strOut += std::to_string(ntohs(pAddrIn->sin_port));
31+
break;
32+
}
33+
case AF_INET6: {
34+
struct sockaddr_in6 *pAddrIn6 = (struct sockaddr_in6 *)pAddr;
35+
36+
inet_ntop(AF_INET6, &(pAddrIn6->sin6_addr), s, INET6_ADDRSTRLEN);
37+
strOut += s;
38+
strOut += ':';
39+
strOut += std::to_string(ntohs(pAddrIn6->sin6_port));
40+
break;
41+
}
42+
default:
43+
return {};
44+
}
45+
return strOut;
46+
}
47+
48+
} // namespace
49+
950
CTCPClient::CTCPClient(const LogFnCallback oLogger, const SettingsFlag eSettings /*= ALL_FLAGS*/)
1051
: ASocket(oLogger, eSettings),
1152
m_eStatus(DISCONNECTED),
@@ -239,57 +280,83 @@ bool CTCPClient::Connect(const std::string& strServer, const std::string& strPor
239280
* If socket(2) (or connect(2)) fails, we (close the socket
240281
* and) try the next address. */
241282

242-
struct addrinfo* pTmpPtr = m_pResultAddrInfo;
283+
std::ostringstream strAddrList;
284+
size_t uTmpIndex = 0;
243285
size_t uSize = 0;
244-
for (pTmpPtr = m_pResultAddrInfo; pTmpPtr != nullptr; pTmpPtr = pTmpPtr->ai_next)
286+
struct addrinfo *pTmpPtr = m_pResultAddrInfo;
287+
for (pTmpPtr = m_pResultAddrInfo; pTmpPtr != nullptr; pTmpPtr = pTmpPtr->ai_next, ++uTmpIndex)
245288
{
246-
++uSize;
289+
++uSize;
290+
if (uTmpIndex != 0)
291+
{
292+
strAddrList << ", ";
293+
}
294+
strAddrList << StringFormat("[%d] = '%s'", uTmpIndex, SockAddrToString(pTmpPtr->ai_addr).data());
247295
}
248296

249297
std::uniform_int_distribution<size_t> RngGen(0, uSize - 1);
250298
size_t uStartIndex = 0;
251-
if (uSize > 0) {
252-
uStartIndex = RngGen(m_Rng);
299+
if (uSize > 0)
300+
{
301+
uStartIndex = RngGen(m_Rng);
253302
}
254303

255304
if (m_eSettingsFlags & ENABLE_LOG)
256-
m_oLog(StringFormat("[TCPClient][Info] Got %d addresses from getaddrinfo, starting from index %d", uSize,
257-
uStartIndex));
305+
{
306+
m_oLog(StringFormat("[TCPClient][Info] Got %d address%s from getaddrinfo, starting from index %d", uSize,
307+
uSize > 1 ? "es" : "", uStartIndex));
308+
m_oLog(StringFormat("[TCPClient][Info] Address list: { %s }", strAddrList.str().data()));
309+
}
258310

259-
struct addrinfo* pResPtr = m_pResultAddrInfo;
260-
for (size_t uIndex = 0; uIndex < uStartIndex; ++uIndex)
311+
struct addrinfo *pResPtr = m_pResultAddrInfo;
312+
for (size_t uIndex = 0; uIndex < uStartIndex; ++uIndex)
261313
{
262-
pResPtr = pResPtr->ai_next;
314+
pResPtr = pResPtr->ai_next;
263315
}
264316

265-
for (size_t uIndex = 0; uIndex < uSize; ++uIndex)
317+
uTmpIndex = uStartIndex;
318+
for (size_t uIndex = 0; uIndex < uSize; ++uIndex, ++uTmpIndex)
266319
{
267-
// create socket
268-
m_ConnectSocket = socket(pResPtr->ai_family, pResPtr->ai_socktype, pResPtr->ai_protocol);
269-
if (m_ConnectSocket < 0) // or == -1
270-
continue;
271-
272-
// connexion to the server
273-
int iConRet = connect(m_ConnectSocket, pResPtr->ai_addr, pResPtr->ai_addrlen);
274-
if (iConRet >= 0) // or != -1
275-
{
276-
/* Success */
277-
m_eStatus = CONNECTED;
278-
279-
if (m_pResultAddrInfo != nullptr) {
280-
freeaddrinfo(m_pResultAddrInfo);
281-
m_pResultAddrInfo = nullptr;
282-
}
320+
// create socket
321+
m_ConnectSocket = socket(pResPtr->ai_family, pResPtr->ai_socktype, pResPtr->ai_protocol);
322+
if (m_ConnectSocket < 0) // or == -1
323+
continue;
324+
325+
// connexion to the server
326+
int iConRet = connect(m_ConnectSocket, pResPtr->ai_addr, pResPtr->ai_addrlen);
327+
if (iConRet >= 0) // or != -1
328+
{
329+
/* Success */
330+
m_eStatus = CONNECTED;
331+
332+
if (m_eSettingsFlags & ENABLE_LOG)
333+
m_oLog(StringFormat("[TCPClient][Info] Successfully connected to address %s at index %d",
334+
SockAddrToString(pResPtr->ai_addr).data(), uTmpIndex));
335+
336+
if (m_pResultAddrInfo != nullptr)
337+
{
338+
freeaddrinfo(m_pResultAddrInfo);
339+
m_pResultAddrInfo = nullptr;
340+
}
283341

284-
return true;
285-
}
342+
return true;
343+
}
344+
345+
if (m_eSettingsFlags & ENABLE_LOG)
346+
m_oLog(StringFormat("[TCPClient][Info] Connection to address %s at index %d failed",
347+
SockAddrToString(pResPtr->ai_addr).data(), uTmpIndex));
286348

287-
if (pResPtr->ai_next == nullptr)
288-
{
349+
if (pResPtr->ai_next == nullptr)
350+
{
351+
uTmpIndex = 0;
289352
pResPtr = m_pResultAddrInfo;
290-
}
353+
}
354+
else
355+
{
356+
pResPtr = pResPtr->ai_next;
357+
}
291358

292-
close(m_ConnectSocket);
359+
close(m_ConnectSocket);
293360
}
294361

295362
if (m_pResultAddrInfo != nullptr)
@@ -302,7 +369,7 @@ bool CTCPClient::Connect(const std::string& strServer, const std::string& strPor
302369
if (m_eSettingsFlags & ENABLE_LOG)
303370
m_oLog("[TCPClient][Error] no such host.");
304371

305-
#endif
372+
#endif
306373

307374
return false;
308375
}

Socket/TCPClient.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,16 @@
99
#ifndef INCLUDE_TCPCLIENT_H_
1010
#define INCLUDE_TCPCLIENT_H_
1111

12-
#include <stdio.h>
13-
#include <stdlib.h>
1412
#include <algorithm>
15-
#include <cstddef> // size_t
13+
#include <cstddef> // size_t
1614
#include <cstdlib>
17-
#include <cstring> // strerror, strlen, memcpy, strcpy
15+
#include <cstring> // strerror, strlen, memcpy, strcpy
1816
#include <ctime>
1917
#include <iostream>
2018
#include <random>
19+
#include <sstream>
20+
#include <stdio.h>
21+
#include <stdlib.h>
2122
#include <string>
2223
#include <vector>
2324

0 commit comments

Comments
 (0)