17 #ifdef TGT_OS_TYPE_VXWORKS 29 #elif defined TGT_OS_TYPE_LINUX || TGT_OS_TYPE_DARWIN 30 #include <arpa/inet.h> 31 #include <sys/socket.h> 34 #error OS not supported for IP Socket Communications 50 struct sockaddr_in address;
52 if ((serverFd = ::socket(AF_INET, SOCK_STREAM, 0)) == -1) {
56 address.sin_family = AF_INET;
57 address.sin_port = htons(this->
m_port);
60 #if defined TGT_OS_TYPE_VXWORKS || TGT_OS_TYPE_DARWIN 61 address.sin_len =
static_cast<U8>(
sizeof(
struct sockaddr_in));
75 if (::bind(serverFd, reinterpret_cast<struct sockaddr*>(&address),
sizeof(address)) < 0) {
80 socklen_t size =
sizeof(address);
81 if (::getsockname(serverFd, reinterpret_cast<struct sockaddr*>(&address), &size) == -1) {
87 if (::listen(serverFd, 1) < 0) {
93 socketDescriptor.
serverFd = serverFd;
94 this->
m_port = ntohs(address.sin_port);
104 int serverFd = socketDescriptor.
serverFd;
107 if (serverFd == -1) {
112 clientFd = ::accept(serverFd,
nullptr,
nullptr);
123 socketDescriptor.
fd = clientFd;
128 const U8*
const data,
static SocketIpStatus addressToIp4(const char *address, void *ip4)
converts a given address in dot form x.x.x.x to an ip address. ONLY works for IPv4.
SocketIpStatus startup(SocketDescriptor &socketDescriptor)
Opens the server socket and listens, does not block.
Failed to configure socket.
PlatformSizeType FwSizeType
SocketIpStatus recv(const SocketDescriptor &fd, U8 *const data, FwSizeType &size)
receive data from the IP socket from the given buffer
FwSignedSizeType sendProtocol(const SocketDescriptor &socketDescriptor, const U8 *const data, const FwSizeType size) override
Protocol specific implementation of send. Called directly with retry from send.
SocketIpStatus setupTimeouts(int socketFd)
setup the socket timeout properties of the opened outgoing socket
static void log(const char *format,...)
log a formated string with supplied arguments
int fd
Used for all sockets to track the communication file descriptor.
PlatformSignedSizeType FwSignedSizeType
virtual SocketIpStatus send(const SocketDescriptor &socketDescriptor, const U8 *const data, const FwSizeType size)
send data out the IP socket from the given buffer
Failed to listen on socket.
U16 m_port
IP address port used.
Failed to accept connection.
Socket operation successful.
U16 getListenPort()
get the port being listened on
SocketIpStatus setupSocketOptions(int socketFd)
setup the socket options of the input socket as defined in IpCfg.hpp
TcpServerSocket()
Constructor for client socket tcp implementation.
Failed to read back port from connection.
uint8_t U8
8-bit unsigned integer
void close(const SocketDescriptor &socketDescriptor)
closes the socket
char m_hostname[SOCKET_MAX_HOSTNAME_SIZE]
Hostname to supply.
SocketIpStatus
Status enumeration for socket return values.
void terminate(const SocketDescriptor &socketDescriptor)
close the server socket created by the startup call
Socket has not been started.
Helper base-class for setting up Berkeley sockets.
Failed to bind to socket.
SocketIpStatus openProtocol(SocketDescriptor &socketDescriptor) override
Tcp specific implementation for opening a client socket connected to this server. ...
FwSignedSizeType recvProtocol(const SocketDescriptor &socketDescriptor, U8 *const data, const FwSizeType size) override
Protocol specific implementation of recv. Called directly with error handling from recv...
int serverFd
Used for server sockets to track the listening file descriptor.