 |
F´ Flight Software - C/C++ Documentation
NASA-v2.0.1
A framework for building embedded system applications to NASA flight quality standards.
|
Go to the documentation of this file.
23 #ifdef TGT_OS_TYPE_VXWORKS
36 #elif defined TGT_OS_TYPE_LINUX || TGT_OS_TYPE_DARWIN
37 #include <sys/socket.h>
40 #include <arpa/inet.h>
42 #error OS not supported for IP Socket Communications
48 IpSocket::IpSocket() : m_fd(-1), m_timeoutSeconds(0), m_timeoutMicroseconds(0), m_port(0), m_open(false) {
53 FW_ASSERT(timeout_microseconds < 1000000, timeout_microseconds);
64 #ifdef TGT_OS_TYPE_VXWORKS
68 struct timeval timeout;
72 if (setsockopt(socketFd, SOL_SOCKET, SO_SNDTIMEO, (
char*)&timeout,
sizeof(timeout)) < 0) {
83 #ifdef TGT_OS_TYPE_VXWORKS
84 U32 ip = inet_addr(address);
91 if (not ::inet_pton(AF_INET, address, ip4)) {
108 if (this->
m_fd != -1) {
109 (void)::shutdown(this->
m_fd, SHUT_RDWR);
139 if (this->
m_fd == -1) {
147 if (((sent == -1) && (errno == EINTR)) || (sent == 0)) {
151 else if ((sent == -1) && ((errno == EBADF) || (errno == ECONNRESET))) {
156 else if (sent == -1) {
182 if (size == -1 && ((errno == EINTR) || errno == EAGAIN)) {
186 else if (size == 0 || ((size == -1) && ((errno == ECONNRESET) || (errno == EBADF)))) {
192 else if (size == -1) {
SocketIpStatus open(void)
open the IP socket for communications
@ SOCK_SUCCESS
Socket operation successful.
@ SOCK_INTERRUPTED_TRY_AGAIN
Interrupted status for retries.
void lock(void)
lock the mutex
void unLock(void)
unlock the mutex
@ SOCK_FAILED_TO_SET_SOCKET_OPTIONS
Failed to configure socket.
SocketIpStatus configure(const char *hostname, const U16 port, const U32 send_timeout_seconds, const U32 send_timeout_microseconds)
configure the ip socket with host and transmission timeouts
virtual SocketIpStatus openProtocol(NATIVE_INT_TYPE &fd)=0
Protocol specific open implementation, called from open.
SocketIpStatus setupTimeouts(NATIVE_INT_TYPE socketFd)
setup the socket timeout properties of the opened outgoing socket
uint8_t U8
8-bit unsigned integer
virtual I32 sendProtocol(const U8 *const data, const U32 size)=0
Protocol specific implementation of send. Called directly with retry from send.
@ SOCK_INVALID_IP_ADDRESS
Bad IP address supplied.
char m_hostname[SOCKET_MAX_HOSTNAME_SIZE]
Hostname to supply.
U32 m_timeoutMicroseconds
virtual I32 recvProtocol(U8 *const data, const U32 size)=0
Protocol specific implementation of recv. Called directly with error handling from recv.
char * string_copy(char *destination, const char *source, U32 num)
copy string with null-termination guaranteed
bool m_open
Have we successfully opened.
SocketIpStatus send(const U8 *const data, const U32 size)
send data out the IP socket from the given buffer
SocketIpStatus
Status enumeration for socket return values.
Declares ISF basic types.
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.
@ SOCK_READ_ERROR
Failed to read socket.
SocketIpStatus recv(U8 *const data, I32 &size)
receive data from the IP socket from the given buffer
@ SOCK_DISCONNECTED
Failed to read socket with disconnect.
@ SOCKET_MAX_HOSTNAME_SIZE
@ SOCK_SEND_ERROR
Failed to send after configured retries.
U16 m_port
IP address port used.
int NATIVE_INT_TYPE
native integer type declaration
void close(void)
closes the socket
bool isOpened(void)
check if IP socket has previously been opened