2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
20#include "net/phy/PhysicalSocket.h"
22#ifndef DOXYGEN_SHOULD_SKIP_THIS
31 template <
typename SocketAddress>
39 template <
typename SocketAddress>
43 typename SocketAddress::SockLen optLen =
sizeof(
domain);
46 optLen =
sizeof(
type);
53 template <
typename SocketAddress>
57 template <
typename SocketAddress>
59 int ret = Super::operator=(core::system::socket(domain, type | flags, protocol)).getFd();
62 for (
const auto& [optName, socketOption] : socketOptions) {
64 setSockopt(socketOption.getOptLevel(), socketOption.getOptName(), socketOption.getOptValue(), socketOption.getOptLen());
66 ret = (ret >= 0 && setSockoptRet < 0) ? setSockoptRet : ret;
77 template <
typename SocketAddress>
79 int ret = core::system::bind(core::Descriptor::getFd(), &bindAddress.getSockAddr(), bindAddress.getSockAddrLen());
82 this->bindAddress = bindAddress;
88 template <
typename SocketAddress>
90 return core::Descriptor::getFd() >= 0;
93 template <
typename SocketAddress>
95 typename SocketAddress::SockLen cErrnoLen =
sizeof(cErrno);
99 template <
typename SocketAddress>
101 PhysicalSocket<SocketAddress>::
setSockopt(
int level,
int optname,
const void* optval,
typename SocketAddress::SockLen optlen)
const {
102 return core::system::setsockopt(PhysicalSocket::getFd(), level, optname, optval, optlen);
105 template <
typename SocketAddress>
106 int PhysicalSocket<SocketAddress>::
getSockopt(
int level,
int optname,
void* optval,
typename SocketAddress::SockLen* optlen)
const {
107 return core::system::getsockopt(PhysicalSocket::getFd(), level, optname, optval, optlen);
110 template <
typename SocketAddress>
112 typename SocketAddress::SockLen& localSockAddrLen) {
113 return core::system::getsockname(core::Descriptor::getFd(),
reinterpret_cast<sockaddr*>(&localSockAddr), &localSockAddrLen);
116 template <
typename SocketAddress>
118 typename SocketAddress::SockLen& remoteSockAddrLen) {
119 return core::system::getpeername(core::Descriptor::getFd(),
reinterpret_cast<sockaddr*>(&remoteSockAddr), &remoteSockAddrLen);
122 template <
typename SocketAddress>
int getPeerName(typename SocketAddress::SockAddr &remoteSockAddr, typename SocketAddress::SockLen &remoteSockAddrLen)
PhysicalSocket(int domain, int type, int protocol)
int setSockopt(int level, int optname, const void *optval, typename SocketAddress::SockLen optlen) const
int getSockError(int &cErrno) const
~PhysicalSocket() override
int open(const std::map< int, const PhysicalSocketOption > &socketOptions, Flags flags)
int bind(SocketAddress &bindAddress)
PhysicalSocket(int fd, const SocketAddress &bindAddress)
int getSockName(typename SocketAddress::SockAddr &localSockAddr, typename SocketAddress::SockLen &localSockAddrLen)
SocketAddress bindAddress
SocketAddress getBindAddress() const
int getSockopt(int level, int optname, void *optval, typename SocketAddress::SockLen *optlen) const