---
name: "xs_bind"
section: "3"
platform: "linux"
package: "libxs-dev"
version: "1.2.0-2"
release: "Debian 10 (Buster)"
platforms: ["linux"]
url: "https://new.carta.tech/xs_bind"
---

# xs\_bind(3)

accept connections on a socket

## NAME

xs\_bind - accept connections on a socket

## SYNOPSIS

**int xs\_bind (void** *\*socket***, const char** *\*endpoint***);**

## DESCRIPTION

The *xs\_bind()* function shall create an endpoint for accepting connections and bind it to the socket referenced by the *socket* argument.

The *endpoint* argument is a string consisting of two parts as follows: *transport*://*address*. The *transport* part specifies the underlying transport protocol to use. The meaning of the *address* part is specific to the underlying transport protocol selected.

The following transports are defined:

*inproc*

local in-process (inter-thread) communication transport, see [**xs\_inproc**(7)](/xs_inproc/7.md)

*ipc*

local inter-process communication transport, see [**xs\_ipc**(7)](/xs_ipc/7.md)

*tcp*

unicast transport using TCP, see [**xs\_tcp**(7)](/xs_tcp/7.md)

*pgm*, *epgm*

reliable multicast transport using PGM, see [**xs\_pgm**(7)](/xs_pgm/7.md)

With the exception of *XS\_PAIR* sockets, a single socket may be connected to multiple endpoints using *xs\_connect()*, while simultaneously accepting incoming connections from multiple endpoints bound to the socket using *xs\_bind()*. Refer to [**xs\_socket**(3)](/xs_socket/3.md) for a description of the exact semantics involved when connecting or binding a socket to multiple endpoints.

## RETURN VALUE

The *xs\_bind()* function shall return endpoint ID if successful. Otherwise it shall return -1 and set *errno* to one of the values defined below.

## ERRORS

**EINVAL**

The endpoint supplied is invalid.

**ENAMETOOLONG**

The supplied name was too long.

**EPROTONOSUPPORT**

The requested *transport* protocol is not supported.

**ENOCOMPATPROTO**

The requested *transport* protocol is not compatible with the socket type.

**EADDRINUSE**

The requested *address* is already in use.

**EADDRNOTAVAIL**

The requested *address* was not local.

**ENODEV**

The requested *address* specifies a nonexistent interface.

**ETERM**

The *context* associated with the specified *socket* was terminated.

**ENOTSOCK**

The provided *socket* was invalid.

## EXAMPLE

**Binding a publisher socket to an in-process and a TCP transport**.

```
/* Create a XS_PUB socket */
void *socket = xs_socket (context, XS_PUB);
assert (socket);
/* Bind it to a in-process transport with the address 'my_publisher' */
int rc = xs_bind (socket, "inproc://my_publisher");
assert (rc != -1);
/* Bind it to a TCP transport on port 5555 of the 'eth0' interface */
rc = xs_bind (socket, "tcp://eth0:5555");
assert (rc != -1);
```

## SEE ALSO

[**xs\_connect**(3)](/xs_connect/3.md) [**xs\_socket**(3)](/xs_socket/3.md) [**xs**(7)](/xs/7.md)

## AUTHORS

The Crossroads documentation was written by Martin Sustrik \<**sustrik@250bpm.com**\[1\]\> and Martin Lucina \<**martin@lucina.net**\[2\]\>.

## NOTES

- 1\.

  sustrik@250bpm.com

  mailto:sustrik@250bpm.com

- 2\.

  martin@lucina.net

  mailto:martin@lucina.net
