artdaq  v3_02_00
artdaq::TCPSocketTransfer Class Reference

TransferInterface implementation plugin that sends data using TCP sockets. More...

#include <artdaq/TransferPlugins/TCPSocketTransfer.hh>

Inheritance diagram for artdaq::TCPSocketTransfer:
artdaq::TransferInterface

Public Member Functions

 TCPSocketTransfer (fhicl::ParameterSet const &ps, Role role)
 TCPSocketTransfer Constructor. More...
 
int receiveFragmentHeader (detail::RawFragmentHeader &header, size_t receiveTimeout) override
 Receive a Fragment Header from the transport mechanism. More...
 
int receiveFragmentData (RawDataType *destination, size_t wordCount) override
 Receive the body of a Fragment to the given destination pointer. More...
 
CopyStatus copyFragment (Fragment &frag, size_t timeout_usec) override
 Copy a Fragment to the destination. Same implementation as moveFragment, as TCP is always reliable. More...
 
CopyStatus moveFragment (Fragment &&frag) override
 Move a Fragment to the destination. More...
 
bool isRunning () override
 Determine whether the TransferInterface plugin is able to send/receive data. More...
 
- Public Member Functions inherited from artdaq::TransferInterface
 TransferInterface (const fhicl::ParameterSet &ps, Role role)
 TransferInterface Constructor. More...
 
 TransferInterface (const TransferInterface &)=delete
 Copy Constructor is deleted.
 
TransferInterfaceoperator= (const TransferInterface &)=delete
 Copy Assignment operator is deleted. More...
 
virtual ~TransferInterface ()=default
 Default virtual Destructor.
 
virtual int receiveFragment (artdaq::Fragment &fragment, size_t receiveTimeout)
 Receive a Fragment from the transport mechanism. More...
 
virtual CopyStatus copyFragment (artdaq::Fragment &fragment, size_t send_timeout_usec)=0
 Copy a Fragment to the destination. May not necessarily be reliable. More...
 
virtual CopyStatus moveFragment (artdaq::Fragment &&fragment)=0
 Move a Fragment to the destination. This should be reliable, if the underlying transport mechanism supports reliable sending. More...
 
std::string uniqueLabel () const
 Get the unique label of this TransferInterface instance. More...
 
virtual int source_rank () const
 Get the source rank for this TransferInterface instance. More...
 
virtual int destination_rank () const
 Get the destination rank for this TransferInterface instance. More...
 
std::string GetTraceName () const
 Constructs a name suitable for TRACE messages. More...
 

Additional Inherited Members

- Public Types inherited from artdaq::TransferInterface
enum  : int { DATA_END = -2222, RECV_TIMEOUT = -1111, RECV_SUCCESS = 0 }
 
enum  Role { Role::kSend, Role::kReceive }
 Used to determine if a TransferInterface is a Sender or Receiver. More...
 
enum  CopyStatus { CopyStatus::kSuccess, CopyStatus::kTimeout, CopyStatus::kErrorNotRequiringException }
 Returned from the send functions, this enumeration describes the possible return codes. If an exception occurs, it will be thrown and should be handled normally. More...
 
- Static Public Member Functions inherited from artdaq::TransferInterface
static std::string CopyStatusToString (CopyStatus in)
 
- Protected Member Functions inherited from artdaq::TransferInterface
Role role () const
 Get the TransferInterface::Role of this TransferInterface. More...
 
- Protected Attributes inherited from artdaq::TransferInterface
size_t buffer_count_
 The number of Fragment transfers the TransferInterface can handle simultaneously.
 
const size_t max_fragment_size_words_
 The maximum size of the transferred Fragment objects, in artdaq::Fragment::RawDataType words.
 
const short partition_number_
 The partition number of the DAQ.
 

Detailed Description

TransferInterface implementation plugin that sends data using TCP sockets.

Definition at line 36 of file TCPSocketTransfer.hh.

Constructor & Destructor Documentation

artdaq::TCPSocketTransfer::TCPSocketTransfer ( fhicl::ParameterSet const &  ps,
TransferInterface::Role  role 
)

TCPSocketTransfer Constructor.

Parameters
psParameterSet used to configure TCPSocketTransfer
roleRole of this TCPSocketTransfer instance (kSend or kReceive)
* TCPSocketTransfer accepts the following Parameters:
* "tcp_receive_buffer_size" (Default: 0): The TCP buffer size on the receive socket
* "send_retry_timeout_us" (Default: 1000000): Microseconds between send retries (infinite retries for moveFragment, up to send_timeout_us for copyFragment)
* "host_map" (REQUIRED): List of FHiCL tables containing information about other hosts in the system.
*   Each table should contain:
*   "rank" (Default: RECV_TIMEOUT): Rank of this host
*   "host" (Default: "localhost"): Hostname of this host
*   "portOffset" (Default: 5500): To avoid collisions, each destination should specify its own port offset.
*     All TCPSocketTransfers sending to that destination will add their own rank to make a unique port number.
* 

TCPSocketTransfer also requires all Parameters for configuring a TransferInterface

Definition at line 41 of file TCPSocket_transfer.cc.

Member Function Documentation

CopyStatus artdaq::TCPSocketTransfer::copyFragment ( Fragment &  frag,
size_t  timeout_usec 
)
inlineoverride

Copy a Fragment to the destination. Same implementation as moveFragment, as TCP is always reliable.

Parameters
fragFragment to copy
timeout_usecTimeout for send, in microseconds
Returns
CopyStatus detailing result of copy

Definition at line 83 of file TCPSocketTransfer.hh.

bool artdaq::TCPSocketTransfer::isRunning ( )
overridevirtual

Determine whether the TransferInterface plugin is able to send/receive data.

Returns
True if the TransferInterface plugin is currently able to send/receive data

Reimplemented from artdaq::TransferInterface.

Definition at line 456 of file TCPSocket_transfer.cc.

CopyStatus artdaq::TCPSocketTransfer::moveFragment ( Fragment &&  frag)
inlineoverride

Move a Fragment to the destination.

Parameters
fragFragment to move
Returns
CopyStatus detailing result of copy

Definition at line 90 of file TCPSocketTransfer.hh.

int artdaq::TCPSocketTransfer::receiveFragmentData ( RawDataType *  destination,
size_t  wordCount 
)
overridevirtual

Receive the body of a Fragment to the given destination pointer.

Parameters
destinationPointer to memory region where Fragment data should be stored
wordCountNumber of RawDataType words to receive
Returns
The rank the Fragment was received from (should be source_rank), or RECV_TIMEOUT

Implements artdaq::TransferInterface.

Definition at line 324 of file TCPSocket_transfer.cc.

int artdaq::TCPSocketTransfer::receiveFragmentHeader ( detail::RawFragmentHeader &  header,
size_t  receiveTimeout 
)
overridevirtual

Receive a Fragment Header from the transport mechanism.

Parameters
[out]headerReceived Fragment Header
receiveTimeoutTimeout for receive
Returns
The rank the Fragment was received from (should be source_rank), or RECV_TIMEOUT

Implements artdaq::TransferInterface.

Definition at line 123 of file TCPSocket_transfer.cc.


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