---
name: "zmq_connect"
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_connect"
---

# zmq\_connect(3)

create outgoing connection from socket

## NAME

zmq\_connect - create outgoing connection from socket

## SYNOPSIS

**int zmq\_connect (void** *\*socket***, const char** *\*endpoint***);**

## DESCRIPTION

The *zmq\_connect()* function connects the *socket* to an *endpoint* and then accepts incoming connections on that endpoint.

The *endpoint* is a string consisting of a *transport*:// followed by an *address*. The *transport* specifies the underlying protocol to use. The *address* specifies the transport-specific address to connect to.

0MQ provides the the following transports:

*tcp*

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

*ipc*

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

*inproc*

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

*pgm*, *epgm*

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

*vmci*

virtual machine communications interface (VMCI), see [**zmq\_vmci**(7)](/zmq_vmci/7.md)

*udp*

unreliable unicast and multicast using UDP, see [**zmq\_udp**(7)](/zmq_udp/7.md)

Every 0MQ socket type except *ZMQ\_PAIR* and *ZMQ\_CHANNEL* supports one-to-many and many-to-one semantics. The precise semantics depend on the socket type and are defined in [**zmq\_socket**(3)](/zmq_socket/3.md).

**Note**\

for most transports and socket types the connection is not performed immediately but as needed by 0MQ. Thus a successful call to *zmq\_connect()* does not mean that the connection was or could actually be established. Because of this, for most transports and socket types the order in which a *server* socket is bound and a *client* socket is connected to it does not matter. The *ZMQ\_PAIR* and *ZMQ\_CHANNEL* sockets are an exception, as they do not automatically reconnect to endpoints.

**Note**\

following a *zmq\_connect()*, for socket types except for ZMQ\_ROUTER, the socket enters its normal *ready* state. By contrast, following a *zmq\_bind()* alone, the socket enters a *mute* state in which the socket blocks or drops messages according to the socket type, as defined in [**zmq\_socket**(3)](/zmq_socket/3.md). A ZMQ\_ROUTER socket enters its normal *ready* state for a specific peer only when handshaking is complete for that peer, which may take an arbitrary time.

**Note**\

for some socket types, multiple connections to the same endpoint don’t really make sense (see **https://github.com/zeromq/libzmq/issues/788**). For those socket types, any attempt to connect to an already connected endpoint is silently ignored (i.e., returns zero). This behavior applies to ZMQ\_DEALER, ZMQ\_SUB, ZMQ\_PUB, and ZMQ\_REQ socket types.

## RETURN VALUE

The *zmq\_connect()* function returns zero if successful. Otherwise it returns -1 and sets *errno* to one of the values defined below.

## ERRORS

**EINVAL**

The endpoint supplied is invalid.

**EPROTONOSUPPORT**

The requested *transport* protocol is not supported.

**ENOCOMPATPROTO**

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

**ETERM**

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

**ENOTSOCK**

The provided *socket* was invalid.

**EMTHREAD**

No I/O thread is available to accomplish the task.

## EXAMPLE

**Connecting a subscriber socket to an in-process and a TCP transport**.

```
/* Create a ZMQ_SUB socket */
void *socket = zmq_socket (context, ZMQ_SUB);
assert (socket);
/* Connect it to an in-process transport with the address 'my_publisher' */
int rc = zmq_connect (socket, "inproc://my_publisher");
assert (rc == 0);
/* Connect it to the host server001, port 5555 using a TCP transport */
rc = zmq_connect (socket, "tcp://server001:5555");
assert (rc == 0);
```

## SEE ALSO

[**zmq\_bind**(3)](/zmq_bind/3.md) [**zmq\_socket**(3)](/zmq_socket/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**.
