The TakTuk communication layer Perl interface provides a way for programs executed using the taktuk(1)
command to exchange data. It is based on a simple send/receive model using multicast-like sends and
optionally timeouted receives. This is only designed to be a control facility, in particular this is not
a high performance communication library.
The Perl communication interface for TakTuk is made of functions that can be called by scripts executed
using the "taktuk_perl" command of the TakTuk engine (preferred way, less installation requirements on
remote machines) or using the TakTuk Perl module provided with the TakTuk distribution. These functions
are:
TakTuk::get($)
gets some information from TakTuk. Currently available information includes 'target', 'rank',
'count', 'father', 'child_min' and 'child_max'. This is a better way to get this information than
environment variables as its takes into account renumbering that might occur after process spawn.
TakTuk::send(%)
sends a scalar to a single peer or a set specification (see taktuk(1) for information about set
specifications). The two mandatory fields in the arguments are "to" (with a set specification) and
"body". Optionally, a field "target" might be given. Returns an undefined value upon error.
TakTuk::recv(%)
blocks until the reception of a message. Returns a list of two elements: the logical number of the
source of the message and the message itself. Accepts an optional "timeout" argument with a numeric
value. Returns an empty list upon error.
When an error occur, all these functions set the variable $TakTuk::error to the numeric code of the error
that occurred. A textual description of the error is provided by the function TakTuk::error_msg($) that
takes the error code as an argument.
Error codes are the following :
TakTuk::ESWRIT
a call to "TakTuk::syswrite" failed. This is due to a "syswrite" error different than "EAGAIN". The
code should be accessible using $!.
TakTuk::EFCLSD
the communication channel to the TakTuk engine has been closed. This typically occur when shutting
down the logical network (using Ctrl-C on root node for instance).
TakTuk::ESREAD ("TakTuk::recv" only)
a call to "sysread" failed (the code should be accessible using $!).
TakTuk::EARGTO ("TakTuk::send" only)
"to" field missing in the arguments.
TakTuk::EARGBD ("TakTuk::send" only)
"body" field missing in the arguments.
TakTuk::ETMOUT ("TakTuk::recv" only)
The call to "TakTuk::recv" timeouted. This only occur when giving a "timeout" field as "TakTuk::recv"
argument.
Finally, the TakTuk Perl module defines some constants which value match the different states reported by
the stream "state" (see taktuk(1) for details about this stream). These constant are the following:
TakTuk::TAKTUK_READY
TakTuk::TAKTUK_NUMBERED
TakTuk::TAKTUK_TERMINATED
TakTuk::CONNECTION_FAILED
TakTuk::CONNECTION_INITIALIZED
TakTuk::CONNECTION_LOST
TakTuk::COMMAND_STARTED
TakTuk::COMMAND_FAILED
TakTuk::COMMAND_TERMINATED
TakTuk::UPDATE_FAILED
TakTuk::PIPE_STARTED
TakTuk::PIPE_FAILED
TakTuk::PIPE_TERMINATED
TakTuk::FILE_RECEPTION_STARTED
TakTuk::FILE_RECEPTION_FAILED
TakTuk::FILE_RECEPTION_TERMINATED
TakTuk::FILE_SEND_FAILED
TakTuk::INVALID_TARGET
TakTuk::NO_TARGET
TakTuk::MESSAGE_DELIVERED
TakTuk::INVALID_DESTINATION
TakTuk::UNAVAILABLE_DESTINATION