2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
20#include "core/State.h"
21#include "core/socket/stream/SocketAcceptor.h"
23#ifndef DOXYGEN_SHOULD_SKIP_THIS
25#include "log/Logger.h"
26#include "utils/PreserveErrno.h"
34namespace core::socket::
stream {
36 template <
typename SocketAddress,
typename PhysicalSocket,
typename Config>
38 typename SocketAddress::SockAddr localSockAddr;
39 typename SocketAddress::SockLen localSockAddrLen =
sizeof(
typename SocketAddress::SockAddr);
41 SocketAddress localPeerAddress;
42 if (physicalSocket.getSockName(localSockAddr, localSockAddrLen) == 0) {
44 localPeerAddress = config->Local::getSocketAddress(localSockAddr, localSockAddrLen);
45 LOG(TRACE) << config->getInstanceName() <<
" [" << physicalSocket.getFd() <<
"]" << std::setw(25)
46 <<
" PeerAddress (local): " << localPeerAddress.toString();
47 }
catch (
const typename SocketAddress::BadSocketAddress& badSocketAddress) {
48 LOG(WARNING) << config->getInstanceName() <<
" [" << physicalSocket.getFd() <<
"]" << std::setw(25)
49 <<
" PeerAddress (local): " << badSocketAddress.what();
52 PLOG(WARNING) << config->getInstanceName() <<
" [" << physicalSocket.getFd() <<
"]" << std::setw(25)
53 <<
" PeerAddress (local) not retrievable";
56 return localPeerAddress;
59 template <
typename SocketAddress,
typename PhysicalSocket,
typename Config>
61 typename SocketAddress::SockAddr remoteSockAddr;
62 typename SocketAddress::SockLen remoteSockAddrLen =
sizeof(
typename SocketAddress::SockAddr);
64 SocketAddress remotePeerAddress;
65 if (physicalSocket.getPeerName(remoteSockAddr, remoteSockAddrLen) == 0) {
67 remotePeerAddress = config->Remote::getSocketAddress(remoteSockAddr, remoteSockAddrLen);
68 LOG(TRACE) << config->getInstanceName() <<
" [" << physicalSocket.getFd() <<
"]" << std::setw(25)
69 <<
" PeerAddress (remote): " << remotePeerAddress.toString();
70 }
catch (
const typename SocketAddress::BadSocketAddress& badSocketAddress) {
71 LOG(WARNING) << config->getInstanceName() <<
" [" << physicalSocket.getFd() <<
"]" << std::setw(25)
72 <<
" PeerAddress (remote): " << badSocketAddress.what();
75 PLOG(WARNING) << config->getInstanceName() <<
" [" << physicalSocket.getFd() <<
"]" << std::setw(25)
76 <<
" PeerAddress (remote) not retrievable";
79 return remotePeerAddress;
236 }
else if (errno != EINTR && errno != EAGAIN && errno != EWOULDBLOCK) {
void useNextSocketAddress() override
SocketAcceptor(const SocketAcceptor &socketAcceptor)
SocketAddress getRemoteSocketAddress(PhysicalSocket &physicalSocket, Config &config)
SocketAddress getLocalSocketAddress(PhysicalSocket &physicalSocket, Config &config)