---
name: "zmq_close"
section: "3"
platform: "linux"
package: "zeromq"
version: "4.3.5-3"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/zmq_close"
---

# zmq\_close(3)

close 0MQ socket

## NAME

zmq\_close - close 0MQ socket

## SYNOPSIS

**int zmq\_close (void** *\*socket***);**

## DESCRIPTION

The *zmq\_close()* function shall destroy the socket referenced by the *socket* argument. Any outstanding messages physically received from the network but not yet received by the application with *zmq\_recv()* shall be discarded. The behaviour for discarding messages sent by the application with *zmq\_send()* but not yet physically transferred to the network depends on the value of the *ZMQ\_LINGER* socket option for the specified *socket*.

*zmq\_close()* must be called exactly once for each socket. If it is never called, *zmq\_ctx\_term()* will block forever. If it is called multiple times for the same socket or if *socket* does not point to a socket, the behaviour is undefined.

**Note**\

The default setting of *ZMQ\_LINGER* does not discard unsent messages; this behaviour may cause the application to block when calling *zmq\_ctx\_term()*. For details refer to [**zmq\_setsockopt**(3)](/zmq_setsockopt/3.md) and [**zmq\_ctx\_term**(3)](/zmq_ctx_term/3.md).

**Note**\

This API will complete asynchronously, so not everything will be deallocated after it returns. See above for details about linger.

## RETURN VALUE

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

## ERRORS

**ENOTSOCK**

The provided *socket* was NULL.

## SEE ALSO

[**zmq\_socket**(3)](/zmq_socket/3.md) [**zmq\_ctx\_term**(3)](/zmq_ctx_term/3.md) [**zmq\_setsockopt**(3)](/zmq_setsockopt/3.md) [**zmq**(7)](/zmq/7.md)

## AUTHORS

This page was written by the 0MQ community. To make a change please read the 0MQ Contribution Policy at **http://www.zeromq.org/docs:contributing**.
