---
name: "bindat"
section: "2"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["freebsd"]
url: "https://new.carta.tech/bindat"
---

# bindat(2)

assign a local protocol address to a socket

## NAME

**bindat** – assign a local protocol address to a socket

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

**#include \<sys/types.h\>**

**#include \<sys/socket.h\>**

**#include \<fcntl.h\>**

*int*\

**bindat**(*int fd*, *int s*, *const struct sockaddr \*addr*, *socklen\_t addrlen*);

## DESCRIPTION

The **bindat**() system call assigns the local protocol address to a socket. When passed the special value AT\_FDCWD in the *fd* parameter, the behavior is identical to a call to [bind(2)](/bind/2.md). Otherwise, **bindat**() works like the [bind(2)](/bind/2.md) system call with two exceptions:

1. It is limited to sockets in the PF\_LOCAL domain.

2. If the file path stored in the *sun\_path* field of the sockaddr\_un structure is a relative path, it is located relative to the directory associated with the file descriptor *fd*.

## RETURN VALUES

The **bindat()** function returns the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

## ERRORS

The **bindat**() system call may fail with the same errors as the [bind(2)](/bind/2.md) system call or with the following errors:

- \[EBADF\]

  The *sun\_path* field does not specify an absolute path and the *fd* argument is neither AT\_FDCWD nor a valid file descriptor.

- \[ENOTDIR\]

  The *sun\_path* field is not an absolute path and *fd* is neither AT\_FDCWD nor a file descriptor associated with a directory.

## SEE ALSO

[bind(2)](/bind/2.md), [connectat(2)](/connectat/2.md), [socket(2)](/socket/2.md), [unix(4)](/unix/4.md)

## AUTHORS

The **bindat** was developed by Pawel Jakub Dawidek ⟨*pawel@dawidek.net*⟩ under sponsorship from the FreeBSD Foundation.
