NAME¶
__pmAddIPC,
__pmLookupIPC,
__pmFdLookupIPC,
__pmOverrideLastFd,
__pmPrintIPC,
__pmResetIPC - IPC
version infrastructure support
C SYNOPSIS¶
#include <pcp/pmapi.h>
#include <pcp/impl.h>
int __pmAddIPC(int
fd, __pmIPC
ipc);
int __pmLookupIPC(__pmIPC **
ipcp);
int __pmFdLookupIPC(int
fd, __pmIPC **
ipcp);
void __pmOverrideLastFd(int
fd);
void __pmPrintIPC(void);
void __pmResetIPC(int
fd);
cc ... -lpcp
DESCRIPTION¶
IPC channels throughout the distributed PCP framework are affected by the PCP
2.0 (and later) PDU changes. These functions are the interface to the libpcp
IPC connection management global data. This data consists of a hash table of
__pmIPC structures (indexed by file descriptor) and a cached,
most-recently-used file descriptor.
Newly created IPC channels must be registered with the hash table using
__pmAddIPC, such that the PDU sending and decoding routines can
determine whether they need to perform any PDU version translations or not,
for backward compatibility with previous the PCP 1.x IPC protocol.
__pmLookupIPC and
__pmFdLookupIPC both provide handles to the
__pmIPC structure associated with the given file descriptor, as previously
established by a call to
__pmAddIPC. The difference between the two is
that one allows an explicit file descriptor lookup, and the other uses the
cached, most-recently-used file descriptor. So
__pmLookupIPC actually
calls
__pmFdLookupIPC using this cached file descriptor as the
argument. The justification for having both is that in some places it is not
possible to use
__pmFdLookupIPC (which is preferred), since at that
particular level of the PMAPI a file descriptor is not available (see the
__pmDecodeError code for an example).
The
__pmOverrideLastFd is an escape mechanism for use in those situations
where the last PDU fetch did not go through the usual channels (ie.
__pmGetPDU), so as to ensure that the cached file descriptor is the correct
file descriptor for the PDU which is currently being processed. This will
typically be used for archive PDU processing or where version information is
not available for a given file descriptor (eg. immediately prior to a PDU
version exchange).
__pmPrintIPC is a useful debugging routine for displaying a table mapping
all currently registered file descriptors to their associated PDU version
numbers. Unused entries in this table should display the value zero in the
version column.
__pmResetIPC resets the version information associated with the given
file descriptor to some known (invalid) number. Subsequent lookups on this
file descriptor will return an UNKNOWN_VERSION embedded within the __pmIPC
structure.
SEE ALSO¶
PMAPI(3)
DIAGNOSTICS¶
A negative return value from
__pmLookupIPC indicates that the requested
file descriptor is not registered in the hash table. This typically indicates
closure of an IPC channel, so PM_ERR_IPC is returned if this is the
case.