sd_is_fifo

Index · Directives · Python · libudev · gudev systemd 215

## Name

sd_is_fifo, sd_is_socket, sd_is_socket_inet, sd_is_socket_unix, sd_is_mq, sd_is_special — Check the type of a file descriptor

## Synopsis

    #include <systemd/sd-daemon.h>

`int sd_is_fifo(` | int fd,
| const char *path`)`;

`int sd_is_socket(` | int fd,
| int family,
| int type,
| int listening`)`;

`int sd_is_socket_inet(` | int fd,
| int family,
| int type,
| int listening,
| uint16_t port`)`;

`int sd_is_socket_unix(` | int fd,
| int type,
| int listening,
| const char *path,
| size_t length`)`;

`int sd_is_mq(` | int fd,
| const char *path`)`;

`int sd_is_special(` | int fd,
| const char *path`)`;

## Description

`sd_is_fifo()` may be called to check whether the specified file descriptor refers to a FIFO or pipe. If the `path` parameter is not `NULL`, it is checked whether the FIFO is bound to the specified file system path.

`sd_is_socket()` may be called to check whether the specified file descriptor refers to a socket. If the `family` parameter is not `AF_UNSPEC`, it is checked whether the socket is of the specified family (AF_UNIX, `AF_INET`, ...). If the `type` parameter is not 0, it is checked whether the socket is of the specified type (`SOCK_STREAM`, `SOCK_DGRAM`, ...). If the `listening` parameter is positive, it is checked whether the socket is in accepting mode, i.e. `listen()` has been called for it. If `listening` is 0, it is checked whether the socket is not in this mode. If the parameter is negative, no such check is made. The `listening` parameter should only be used for stream sockets and should be set to a negative value otherwise.

`sd_is_socket_inet()` is similar to `sd_is_socket()`, but optionally checks the IPv4 or IPv6 port number the socket is bound to, unless `port` is zero. For this call `family` must be passed as either `AF_UNSPEC`, `AF_INET`, or `AF_INET6`.

`sd_is_socket_unix()` is similar to `sd_is_socket()` but optionally checks the `AF_UNIX` path the socket is bound to, unless the `path` parameter is `NULL`. For normal file system `AF_UNIX` sockets, set the `length` parameter to 0. For Linux abstract namespace sockets, set the `length` to the size of the address, including the initial 0 byte, and set the `path` to the initial 0 byte of the socket address.

`sd_is_mq()` may be called to check whether the specified file descriptor refers to a POSIX message queue. If the `path` parameter is not `NULL`, it is checked whether the message queue is bound to the specified name.

`sd_is_special()` may be called to check whether the specified file descriptor refers to a special file. If the `path` parameter is not `NULL`, it is checked whether the file descriptor is bound to the specified file name. Special files in this context are character device nodes and files in `/proc` or `/sys`.

## Return Value

On failure, these calls return a negative errno-style error code. If the file descriptor is of the specified type and bound to the specified address, a positive return value is returned, otherwise zero.

## Notes

These APIs are implemented as a shared library, which can be compiled and linked to with the `libsystemd` pkg-config(1) file.

Internally, these function use a combination of `fstat()` and `getsockname()` to check the file descriptor type and where it is bound to.

## See Also

systemd(1), sd-daemon(3), sd_listen_fds(3), systemd.service(5), systemd.socket(5)