tfSendToInterface

Jump to: navigation, search

Table of Contents >> Programmer's Reference


#include <trsocket.h>


int tfSendToInterface (
int socketDescriptor,
const char * bufferPtr,
int bufferLength,
int flags,
const struct sockaddr * toAddressPtr,
int toAddressLength,
ttUserInterface interfaceHandle,
unsigned int mhomeIndex
);


Function Description

tfSendToInterface() is used to transmit a message to another transport end-point. tfSendToInterface() may be used at any time (either in a connected or unconnected state), but not for a TCP socket. socketDescriptor is a socket created with socket. The address of the target is given by to with toLength specifying its size. If the message is too long to pass atomically through the underlying protocol, then TM_SOCKET_ERROR is returned with the socket error being set to TM_EMSGSIZE, and the message is not transmitted. A return value of TM_SOCKET_ERROR indicates locally detected errors only. A positive return value does not implicitly mean the message was delivered, but rather that it was sent. If the socket does not have enough buffer space available to hold the message being sent, and is in blocking mode, tfSendToInterface() blocks. If it is in non-blocking mode or the MSG_DONTWAIT flag has been set in the flags parameter, TM_SOCKET_ERROR is returned with the socket error being set to TM_EWOULDBLOCK. The select call may be used to determine when it is possible to send more data.


Note Note: If tfSendToInterface() is used on an Ethernet interface with the interface configured temporarily with a zero IP address (TM_DEV_IP_USER_BOOT flag), then the only allowed destination IP addresses are either limited broadcast (i.e. all 0xF's), or multicast addresses.


Parameters

  • socketDescriptor
    The socket descriptor to use to send the data.
  • bufferPtr
    The buffer to send.
  • bufferLength
    The length of the buffer to send.
  • flags
    MSG_DONTWAIT: Don't wait for the sending to complete but rather return immediately.
    MSG_DONTROUTE: The SO_DONTROUTE option is turned on for the duration of the operation. Only diagnostic or routing programs use it.
  • toAddressPtr
    The address to send the data to.
  • toAddressLength
    The length of the area pointed to by toAddressPtr.
  • interfaceHandle
    Interface to send the data through as returned by tfAddInterface().
  • mhomeIndex
    Multihome index on the interface.


Returns

  • >= 0
    The number of bytes actually sent on the socket.
  • TM_SOCKET_ERROR
    Failure.


Note Note: TM_SOCKET_ERROR means that this socket call has failed and the errorCode has been set on the socket itself.

To retrieve the socket error the user must call tfGetSocketError(socketDescriptor).


Possible socket errors

  • TM_EBADF
    The socket descriptor is invalid.
  • TM_ENOBUFS
    Insufficient memory to complete the operation.
  • TM_EHOSTUNREACH
    No route to destination.
  • TM_ECONNREFUSED
    The socket received an ICMP destination unreachable message from the remote host. This typically means that the receiver is not listening on the remote port.
  • TM_EMSGSIZE
    The socket requires that the message be sent atomically and the message was too long.
  • TM_EPROTOTYPE
    The TCP protocol requires usage of send() not tfSendToInterface().
  • TM_EWOULDBLOCK
    The socket is marked as non-blocking and the tfSendToInterface() operation would block.
  • TM_EINVAL
    One of the parameters is bad.


Table of Contents >> Programmer's Reference