SNode.C
Loading...
Searching...
No Matches
net::phy::PhysicalSocket< SocketAddressT > Class Template Reference

#include <PhysicalSocket.h>

Inheritance diagram for net::phy::PhysicalSocket< SocketAddressT >:
Collaboration diagram for net::phy::PhysicalSocket< SocketAddressT >:

Public Types

enum  Flags { NONE = 0 , NONBLOCK = SOCK_NONBLOCK , CLOEXIT = SOCK_CLOEXEC }
 

Public Member Functions

 PhysicalSocket ()=delete
 
 PhysicalSocket (PhysicalSocket &)=delete
 
PhysicalSocketoperator= (PhysicalSocket &)=delete
 
 PhysicalSocket (const PhysicalSocket &)=delete
 
PhysicalSocketoperator= (const PhysicalSocket &)=delete
 
 PhysicalSocket (int fd, const SocketAddress &bindAddress)
 
int open (const std::map< int, const PhysicalSocketOption > &socketOptions, Flags flags)
 
int bind (SocketAddress &bindAddress)
 
bool isValid () const
 
int getSockError (int &cErrno) const
 
int getSockName (typename SocketAddress::SockAddr &localSockAddr, typename SocketAddress::SockLen &localSockAddrLen)
 
int getPeerName (typename SocketAddress::SockAddr &remoteSockAddr, typename SocketAddress::SockLen &remoteSockAddrLen)
 
SocketAddress getBindAddress () const
 
- Public Member Functions inherited from core::Descriptor
 Descriptor ()=delete
 
 Descriptor (const Descriptor &d)=delete
 
Descriptoroperator= (int fd)
 
Descriptoroperator= (const Descriptor &descriptor)=delete
 
Descriptoroperator= (Descriptor &&descriptor) noexcept
 
int getFd () const
 

Protected Types

using SocketAddress = SocketAddressT
 

Protected Member Functions

 PhysicalSocket (int domain, int type, int protocol)
 
 PhysicalSocket (PhysicalSocket &&physicalSocket) noexcept=default
 
PhysicalSocketoperator= (PhysicalSocket &&) noexcept=default
 
 ~PhysicalSocket () override
 
- Protected Member Functions inherited from core::Descriptor
 Descriptor (int fd)
 
 Descriptor (Descriptor &&descriptor) noexcept
 
virtual ~Descriptor ()
 

Protected Attributes

SocketAddress bindAddress
 
int domain = 0
 
int type = 0
 
int protocol = 0
 

Private Types

using Super = core::Descriptor
 

Private Member Functions

int setSockopt (int level, int optname, const void *optval, typename SocketAddress::SockLen optlen) const
 
int getSockopt (int level, int optname, void *optval, typename SocketAddress::SockLen *optlen) const
 

Detailed Description

template<typename SocketAddressT>
class net::phy::PhysicalSocket< SocketAddressT >

Definition at line 38 of file PhysicalSocket.h.

Member Typedef Documentation

◆ SocketAddress

template<typename SocketAddressT >
using net::phy::PhysicalSocket< SocketAddressT >::SocketAddress = SocketAddressT
protected

Definition at line 46 of file PhysicalSocket.h.

◆ Super

template<typename SocketAddressT >
using net::phy::PhysicalSocket< SocketAddressT >::Super = core::Descriptor
private

Definition at line 40 of file PhysicalSocket.h.

Member Enumeration Documentation

◆ Flags

template<typename SocketAddressT >
enum net::phy::PhysicalSocket::Flags
Enumerator
NONE 
NONBLOCK 
CLOEXIT 

Definition at line 43 of file PhysicalSocket.h.

Constructor & Destructor Documentation

◆ PhysicalSocket() [1/6]

◆ PhysicalSocket() [2/6]

template<typename SocketAddressT >
net::phy::PhysicalSocket< SocketAddressT >::PhysicalSocket ( PhysicalSocket< SocketAddressT > && physicalSocket)
protecteddefaultnoexcept

◆ ~PhysicalSocket()

template<typename SocketAddress >
net::phy::PhysicalSocket< SocketAddress >::~PhysicalSocket ( )
overrideprotected

Definition at line 54 of file PhysicalSocket.hpp.

54 {
55 }

◆ PhysicalSocket() [3/6]

template<typename SocketAddressT >
net::phy::PhysicalSocket< SocketAddressT >::PhysicalSocket ( )
delete

◆ PhysicalSocket() [4/6]

template<typename SocketAddressT >
net::phy::PhysicalSocket< SocketAddressT >::PhysicalSocket ( PhysicalSocket< SocketAddressT > & )
delete

◆ PhysicalSocket() [5/6]

template<typename SocketAddressT >
net::phy::PhysicalSocket< SocketAddressT >::PhysicalSocket ( const PhysicalSocket< SocketAddressT > & )
delete

◆ PhysicalSocket() [6/6]

template<typename SocketAddress >
net::phy::PhysicalSocket< SocketAddress >::PhysicalSocket ( int fd,
const SocketAddress & bindAddress )

Definition at line 40 of file PhysicalSocket.hpp.

41 : Descriptor(fd)
43 typename SocketAddress::SockLen optLen = sizeof(domain);
44 getSockopt(SOL_SOCKET, SO_DOMAIN, &domain, &optLen);
45
46 optLen = sizeof(type);
47 getSockopt(SOL_SOCKET, SO_TYPE, &type, &optLen);
48
49 optLen = sizeof(protocol);
50 getSockopt(SOL_SOCKET, SO_PROTOCOL, &protocol, &optLen);
51 }
int getSockopt(int level, int optname, void *optval, typename SocketAddress::SockLen *optlen) const

References net::phy::PhysicalSocket< SocketAddressT >::bindAddress, net::phy::PhysicalSocket< SocketAddressT >::domain, net::phy::PhysicalSocket< SocketAddressT >::getSockopt(), and net::phy::PhysicalSocket< SocketAddressT >::type.

Here is the call graph for this function:

Member Function Documentation

◆ bind()

template<typename SocketAddress >
int net::phy::PhysicalSocket< SocketAddress >::bind ( SocketAddress & bindAddress)

Definition at line 78 of file PhysicalSocket.hpp.

78 {
79 int ret = core::system::bind(core::Descriptor::getFd(), &bindAddress.getSockAddr(), bindAddress.getSockAddrLen());
80
81 if (ret == 0) {
83 }
84
85 return ret;
86 }
int getFd() const
int bind(int sockfd, const sockaddr *addr, socklen_t addrlen)
Definition socket.cpp:35

◆ getBindAddress()

template<typename SocketAddress >
SocketAddress net::phy::PhysicalSocket< SocketAddress >::getBindAddress ( ) const

Definition at line 123 of file PhysicalSocket.hpp.

123 {
124 return bindAddress;
125 }

References net::phy::PhysicalSocket< SocketAddressT >::bindAddress.

◆ getPeerName()

template<typename SocketAddress >
int net::phy::PhysicalSocket< SocketAddress >::getPeerName ( typename SocketAddress::SockAddr & remoteSockAddr,
typename SocketAddress::SockLen & remoteSockAddrLen )

Definition at line 117 of file PhysicalSocket.hpp.

118 {
119 return core::system::getpeername(core::Descriptor::getFd(), reinterpret_cast<sockaddr*>(&remoteSockAddr), &remoteSockAddrLen);
120 }
int getpeername(int sockfd, sockaddr *addr, socklen_t *addrlen)
Definition socket.cpp:64

◆ getSockError()

template<typename SocketAddress >
int net::phy::PhysicalSocket< SocketAddress >::getSockError ( int & cErrno) const

Definition at line 94 of file PhysicalSocket.hpp.

94 {
95 typename SocketAddress::SockLen cErrnoLen = sizeof(cErrno);
96 return getSockopt(SOL_SOCKET, SO_ERROR, &cErrno, &cErrnoLen);
97 }

References net::phy::PhysicalSocket< SocketAddressT >::getSockopt().

Here is the call graph for this function:

◆ getSockName()

template<typename SocketAddress >
int net::phy::PhysicalSocket< SocketAddress >::getSockName ( typename SocketAddress::SockAddr & localSockAddr,
typename SocketAddress::SockLen & localSockAddrLen )

Definition at line 111 of file PhysicalSocket.hpp.

112 {
113 return core::system::getsockname(core::Descriptor::getFd(), reinterpret_cast<sockaddr*>(&localSockAddr), &localSockAddrLen);
114 }
int getsockname(int sockfd, sockaddr *addr, socklen_t *addrlen)
Definition socket.cpp:59

◆ getSockopt()

template<typename SocketAddress >
int net::phy::PhysicalSocket< SocketAddress >::getSockopt ( int level,
int optname,
void * optval,
typename SocketAddress::SockLen * optlen ) const
private

Definition at line 106 of file PhysicalSocket.hpp.

106 {
107 return core::system::getsockopt(PhysicalSocket::getFd(), level, optname, optval, optlen);
108 }
int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen)
Definition socket.cpp:79

Referenced by net::phy::PhysicalSocket< SocketAddressT >::getSockError(), and net::phy::PhysicalSocket< SocketAddressT >::PhysicalSocket().

Here is the caller graph for this function:

◆ isValid()

template<typename SocketAddress >
bool net::phy::PhysicalSocket< SocketAddress >::isValid ( ) const

Definition at line 89 of file PhysicalSocket.hpp.

89 {
90 return core::Descriptor::getFd() >= 0;
91 }

◆ open()

template<typename SocketAddress >
int net::phy::PhysicalSocket< SocketAddress >::open ( const std::map< int, const PhysicalSocketOption > & socketOptions,
Flags flags )

Definition at line 58 of file PhysicalSocket.hpp.

58 {
60
61 if (ret >= 0) {
62 for (const auto& [optName, socketOption] : socketOptions) {
63 int setSockoptRet =
64 setSockopt(socketOption.getOptLevel(), socketOption.getOptName(), socketOption.getOptValue(), socketOption.getOptLen());
65
66 ret = (ret >= 0 && setSockoptRet < 0) ? setSockoptRet : ret;
67
68 if (ret < 0) {
69 break;
70 }
71 }
72 }
73
74 return ret;
75 }
Descriptor & operator=(int fd)
int setSockopt(int level, int optname, const void *optval, typename SocketAddress::SockLen optlen) const
int socket(int domain, int type, int protocol)
Definition socket.cpp:30

◆ operator=() [1/3]

template<typename SocketAddressT >
PhysicalSocket & net::phy::PhysicalSocket< SocketAddressT >::operator= ( const PhysicalSocket< SocketAddressT > & )
delete

◆ operator=() [2/3]

template<typename SocketAddressT >
PhysicalSocket & net::phy::PhysicalSocket< SocketAddressT >::operator= ( PhysicalSocket< SocketAddressT > && )
protecteddefaultnoexcept

◆ operator=() [3/3]

template<typename SocketAddressT >
PhysicalSocket & net::phy::PhysicalSocket< SocketAddressT >::operator= ( PhysicalSocket< SocketAddressT > & )
delete

◆ setSockopt()

template<typename SocketAddress >
int net::phy::PhysicalSocket< SocketAddress >::setSockopt ( int level,
int optname,
const void * optval,
typename SocketAddress::SockLen optlen ) const
private

Definition at line 101 of file PhysicalSocket.hpp.

101 {
102 return core::system::setsockopt(PhysicalSocket::getFd(), level, optname, optval, optlen);
103 }
int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen)
Definition socket.cpp:84

Member Data Documentation

◆ bindAddress

template<typename SocketAddressT >
SocketAddress net::phy::PhysicalSocket< SocketAddressT >::bindAddress
protected

◆ domain

template<typename SocketAddressT >
int net::phy::PhysicalSocket< SocketAddressT >::domain = 0
protected

◆ protocol

template<typename SocketAddressT >
int net::phy::PhysicalSocket< SocketAddressT >::protocol = 0
protected

◆ type

template<typename SocketAddressT >
int net::phy::PhysicalSocket< SocketAddressT >::type = 0
protected

The documentation for this class was generated from the following files: