F´ Flight Software - C/C++ Documentation
A framework for building embedded system applications to NASA flight quality standards.
Drv::UdpSocket Class Reference

Helper for setting up Udp using Berkeley sockets as a client. More...

#include <Drv/Ip/UdpSocket.hpp>

Inheritance diagram for Drv::UdpSocket:
Drv::IpSocket

Public Member Functions

 UdpSocket ()
 Constructor for client socket udp implementation. More...
 
virtual ~UdpSocket ()
 to cleanup state created at instantiation More...
 
SocketIpStatus configure (const char *hostname, const U16 port, const U32 send_timeout_seconds, const U32 send_timeout_microseconds) override
 configure is disabled More...
 
SocketIpStatus configureSend (const char *hostname, const U16 port, const U32 send_timeout_seconds, const U32 send_timeout_microseconds)
 configure the udp socket for outgoing transmissions More...
 
SocketIpStatus configureRecv (const char *hostname, const U16 port)
 configure the udp socket for incoming transmissions More...
 
U16 getRecvPort ()
 get the port being received on More...
 
SocketIpStatus send (const SocketDescriptor &socketDescriptor, const U8 *const data, const FwSizeType size) override
 UDP-specific implementation of send that handles zero-length datagrams correctly. More...
 
- Public Member Functions inherited from Drv::IpSocket
 IpSocket ()
 
virtual ~IpSocket ()
 
SocketIpStatus open (SocketDescriptor &socketDescriptor)
 open the IP socket for communications More...
 
SocketIpStatus recv (const SocketDescriptor &fd, U8 *const data, FwSizeType &size)
 receive data from the IP socket from the given buffer More...
 
void close (const SocketDescriptor &socketDescriptor)
 closes the socket More...
 
void shutdown (const SocketDescriptor &socketDescriptor)
 shutdown the socket More...
 

Protected Member Functions

SocketIpStatus bind (const int fd)
 bind the UDP to a port such that it can receive packets at the previously configured port More...
 
SocketIpStatus openProtocol (SocketDescriptor &socketDescriptor) override
 udp specific implementation for opening a socket. More...
 
FwSignedSizeType sendProtocol (const SocketDescriptor &socketDescriptor, const U8 *const data, const FwSizeType size) override
 Protocol specific implementation of send. Called directly with retry from send. More...
 
FwSignedSizeType recvProtocol (const SocketDescriptor &socketDescriptor, U8 *const data, const FwSizeType size) override
 Protocol specific implementation of recv. Called directly with error handling from recv. More...
 
SocketIpStatus handleZeroReturn () override
 Handle zero return from recvProtocol for UDP. More...
 
- Protected Member Functions inherited from Drv::IpSocket
virtual bool isValidPort (U16 port)
 Check if the given port is valid for the socket. More...
 
SocketIpStatus setupTimeouts (int socketFd)
 setup the socket timeout properties of the opened outgoing socket More...
 
SocketIpStatus setupSocketOptions (int socketFd)
 setup the socket options of the input socket as defined in IpCfg.hpp More...
 

Additional Inherited Members

- Static Protected Member Functions inherited from Drv::IpSocket
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. More...
 
- Protected Attributes inherited from Drv::IpSocket
U32 m_timeoutSeconds
 
U32 m_timeoutMicroseconds
 
U16 m_port
 IP address port used. More...
 
char m_hostname [SOCKET_MAX_HOSTNAME_SIZE]
 Hostname to supply. More...
 

Detailed Description

Helper for setting up Udp using Berkeley sockets as a client.

Certain IP headers have conflicting definitions with the m_data member of various types in fprime. UdpSocket separates the ip setup from the incoming Fw::Buffer in the primary component class preventing this collision.

Definition at line 36 of file UdpSocket.hpp.

Constructor & Destructor Documentation

◆ UdpSocket()

Drv::UdpSocket::UdpSocket ( )

Constructor for client socket udp implementation.

Definition at line 42 of file UdpSocket.cpp.

◆ ~UdpSocket()

Drv::UdpSocket::~UdpSocket ( )
virtualdefault

to cleanup state created at instantiation

Member Function Documentation

◆ bind()

SocketIpStatus Drv::UdpSocket::bind ( const int  fd)
protected

bind the UDP to a port such that it can receive packets at the previously configured port

Parameters
socketDescriptorsocket descriptor used in bind
Returns
status of the bind

Definition at line 91 of file UdpSocket.cpp.

◆ configure()

SocketIpStatus Drv::UdpSocket::configure ( const char *  hostname,
const U16  port,
const U32  send_timeout_seconds,
const U32  send_timeout_microseconds 
)
overridevirtual

configure is disabled

Warning
configure is disabled for UdpSocket. Use configureSend and configureRecv instead.

Reimplemented from Drv::IpSocket.

Definition at line 49 of file UdpSocket.cpp.

◆ configureRecv()

SocketIpStatus Drv::UdpSocket::configureRecv ( const char *  hostname,
const U16  port 
)

configure the udp socket for incoming transmissions

Configures the UDP handler to use the given hostname and port for incoming transmissions. Outgoing hostname and port are configured using the configureSend function call for UDP as it requires separate host/port pairs for outgoing and incoming transmissions. Hostname DNS translation is left up to the caller and thus hostname must be an IP address in dot-notation of the form "x.x.x.x". It is possible to configure the UDP port as a single-direction receive port only.

Parameters
hostnamesocket uses for incoming transmissions. Must be of form x.x.x.x
portport socket uses for incoming transmissions. Can be 0 for ephemeral port assignment.
Returns
status of configure

Definition at line 67 of file UdpSocket.cpp.

◆ configureSend()

SocketIpStatus Drv::UdpSocket::configureSend ( const char *  hostname,
const U16  port,
const U32  send_timeout_seconds,
const U32  send_timeout_microseconds 
)

configure the udp socket for outgoing transmissions

Configures the UDP handler to use the given hostname and port for outgoing transmissions. Incoming hostname and port are configured using the configureRecv function call for UDP as it requires separate host/port pairs for outgoing and incoming transmissions. Hostname DNS translation is left up to the caller and thus hostname must be an IP address in dot-notation of the form "x.x.x.x". If port is set to 0, the socket will be configured for ephemeral send (dynamic reply-to) and will use the sender's address from the first received datagram for replies. It is possible to configure the UDP port as a single-direction send port only.

Note: delegates to IpSocket::configure

Parameters
hostnamesocket uses for outgoing transmissions. Must be of form x.x.x.x
portport socket uses for outgoing transmissions. Can be 0 for ephemeral reply-to mode.
send_timeout_secondssend timeout seconds portion
send_timeout_microsecondssend timeout microseconds portion. Must be less than 1000000
Returns
status of configure

Definition at line 57 of file UdpSocket.cpp.

◆ getRecvPort()

U16 Drv::UdpSocket::getRecvPort ( )

get the port being received on

Most useful when receive was configured to use port "0", this will return the port used for receiving data after a port has been determined. Will return 0 if the connection has not been setup.

Returns
receive port

Definition at line 87 of file UdpSocket.cpp.

◆ handleZeroReturn()

SocketIpStatus Drv::UdpSocket::handleZeroReturn ( )
overrideprotectedvirtual

Handle zero return from recvProtocol for UDP.

For UDP, a return of 0 from recvfrom means a 0-byte datagram was received, which is a success case, not a disconnection.

Returns
SocketIpStatus Status to return from recv

Reimplemented from Drv::IpSocket.

Definition at line 267 of file UdpSocket.cpp.

◆ openProtocol()

SocketIpStatus Drv::UdpSocket::openProtocol ( SocketDescriptor socketDescriptor)
overrideprotectedvirtual

udp specific implementation for opening a socket.

Parameters
socketDescriptor(output) file descriptor opened. Only valid on SOCK_SUCCESS. Otherwise will be invalid
Returns
status of open

Implements Drv::IpSocket.

Definition at line 115 of file UdpSocket.cpp.

◆ recvProtocol()

FwSignedSizeType Drv::UdpSocket::recvProtocol ( const SocketDescriptor socketDescriptor,
U8 *const  data,
const FwSizeType  size 
)
overrideprotectedvirtual

Protocol specific implementation of recv. Called directly with error handling from recv.

Parameters
socketDescriptordescriptor to recv from
datadata pointer to fill
sizesize of data buffer
Returns
: size of data received, or -1 on error.

Implements Drv::IpSocket.

Definition at line 212 of file UdpSocket.cpp.

◆ send()

SocketIpStatus Drv::UdpSocket::send ( const SocketDescriptor socketDescriptor,
const U8 *const  data,
const FwSizeType  size 
)
overridevirtual

UDP-specific implementation of send that handles zero-length datagrams correctly.

Parameters
socketDescriptordescriptor to send to
datadata pointer to send
sizesize of data to send
Returns
: status of the send operation

Reimplemented from Drv::IpSocket.

Definition at line 236 of file UdpSocket.cpp.

◆ sendProtocol()

FwSignedSizeType Drv::UdpSocket::sendProtocol ( const SocketDescriptor socketDescriptor,
const U8 *const  data,
const FwSizeType  size 
)
overrideprotectedvirtual

Protocol specific implementation of send. Called directly with retry from send.

Parameters
socketDescriptordescriptor to send to
datadata to send
sizesize of data to send
Returns
: size of data sent, or -1 on error.

Implements Drv::IpSocket.

Definition at line 200 of file UdpSocket.cpp.


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