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

# xs\_shutdown(3)

shut down part of the socket

## NAME

xs\_shutdown - shut down part of the socket

## SYNOPSIS

**int xs\_shutdown (void** *\*socket***, int** *how***);**

## DESCRIPTION

This function partially closes the socket. It disconnects or unbinds an endpoint previously connected or bound by *xs\_bind()* or *xs\_connect()*. *how* parameter is the endpoint ID as returned by *xs\_bind()* or *xs\_connect()*.

Endpoint shutdown honours *linger* socket option. I.e. if there are any pending outbound messages, Crossroads will try to push them to the network for the specified amount of time before giving up.

Note: inproc endpoints don’t support partial shutdown at the moment.

## RETURN VALUE

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

## ERRORS

**EINVAL**

The endpoint ID supplied doesn’t correspond to any active endpoint.

**ENOTSUP**

Specified endpoint doesn’t support partial shutdown.

**ETERM**

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

**ENOTSOCK**

The provided *socket* was invalid.

## EXAMPLE

**Binding socket to an endpoint, then unbinding it**.

```
/* Create a socket */
void *socket = xs_socket (context, XS_PUB);
assert (socket);
/* Bind it to a TCP endpoint */
int id = xs_bind (socket, "tcp://*:5555");
assert (id != -1);
/* Unbind the socket from the endpoint */
rc = xs_shutdown (socket, id);
assert (rc == 0);
```

## SEE ALSO

[**xs\_connect**(3)](/xs_connect/3.md) [**xs\_bind**(3)](/xs_bind/3.md) [**xs**(7)](/xs/7.md)

## AUTHORS

This manual page was written by Martin Sustrik \<**sustrik@250bpm.com**\[1\]\>.

## NOTES

- 1\.

  sustrik@250bpm.com

  mailto:sustrik@250bpm.com
