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/SocketConnector.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;
Config & getConfig() const
std::shared_ptr< Config > config
Socket(const std::string &name)
SocketAddress localAddress
SocketAddress remoteAddress
void unobservedEvent() final
void onReadError(int errnum)
void shutdownRead() final
void onReceivedFromPeer(std::size_t available) final
void onWriteError(int errnum)
void setTimeout(const utils::Timeval &timeout) final
std::size_t readFromPeer(char *chunk, std::size_t chunkLen) final
bool onSignal(int signum) final
const SocketAddress & getRemoteAddress() const final
PhysicalSocket physicalSocket
void doWriteShutdown(const std::function< void()> &onShutdown) override
void shutdownWrite(bool forceClose) final
void sendToPeer(const char *chunk, std::size_t chunkLen) final
const SocketAddress & getLocalAddress() const final
void writeTimeout() final
~SocketConnectionT() override
void disconnectCurrentSocketContext()
SocketConnection(const std::string &instanceName, PhysicalSocket &&physicalSocket, const std::function< void(SocketConnection *)> &onDisconnect, const std::string &configuredServer, const SocketAddress &localAddress, const SocketAddress &remoteAddress, const utils::Timeval &readTimeout, const utils::Timeval &writeTimeout, std::size_t readBlockSize, std::size_t writeBlockSize, const utils::Timeval &terminateTimeout)
SocketConnector(const SocketConnector &socketConnector)
void useNextSocketAddress() override
SocketAddress getRemoteSocketAddress(PhysicalSocket &physicalSocket, Config &config)
SocketAddress getLocalSocketAddress(PhysicalSocket &physicalSocket, Config &config)