---
name: "xpamacros"
section: "3"
platform: "linux"
package: "libxpa-dev"
version: "2.1.20-3"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/xpamacros"
---

# xpamacros(3)

Server Callback Macros

## NAME

XPAMacros - Server Callback Macros

## SYNOPSIS

```
  #include <xpa.h>
  xpa_class, xpa_name, xpa_method, xpa_cmdfd, xpa_datafd,
  xpa_sendian, xpa_cendian
```

## DESCRIPTION

Server routines have  access to information about the XPA being called via the following macros (each of which takes the xpa handle as an argument):

```
  macro                 explanation
  ------                -----------
  xpa_class             class of this xpa
  xpa_name              name of this xpa
  xpa_method            method string (inet or local connect info)
  xpa_cmdfd             fd of command socket
  xpa_datafd            fd of data socket
  xpa_sendian           endian-ness of server ("little" or "big")
  xpa_cendian           endian-ness of client ("little" or "big"
```

The argument to these macros is the call\_data pointer that is passed to the server procedure.  This pointer should be type case to XPA in the server routine:

```
  XPA xpa = (XPA)call_data;
```

The most important of these macros is *xpa\_datafd()*.  A server routine that sets "fillbuf=false" in receive\_mode or send\_mode can use this macro to perform I/O directly to/from the client, rather than using buf.

The xpa\_cendian and xpa\_sendian macros can be used together to determine if the data transferred from the client is byte swapped with respect to the server. Values for these macros are: "little", "big", or "?". In order to do a proper conversion, you still need to know the format of the data (i.e., byte swapping is dependent on the size of the data element being converted).

## SEE ALSO

See xpa(n) for a list of XPA help pages
