---
name: "modbus_tcp_listen"
section: "3"
platform: "linux"
package: "libmodbus-dev"
version: "3.1.6-2.1"
release: "Debian 12 (Bookworm)"
platforms: ["linux"]
url: "https://new.carta.tech/modbus_tcp_listen"
---

# modbus\_tcp\_listen(3)

create and listen a TCP Modbus socket (IPv4)

## NAME

modbus\_tcp\_listen - create and listen a TCP Modbus socket (IPv4)

## SYNOPSIS

**int modbus\_tcp\_listen(modbus\_t \****ctx***, int** *nb\_connection***);**

## DESCRIPTION

The **modbus\_tcp\_listen()** function shall create a socket and listen to maximum *nb\_connection* incoming connections on the specified IP address. The context \_ctx \_must be allocated and initialized with [**modbus\_new\_tcp**(3)](/modbus_new_tcp/3.md) before to set the IP address to listen, if IP address is set to NULL or *0.0.0.0*, any addresses will be listen.

## RETURN VALUE

The function shall return a new socket if successful. Otherwise it shall return -1 and set errno.

## EXAMPLE

For detailed examples, see source files in tests directory:

• unit-test-server.c, simple but handle only one connection

• bandwidth-server-many-up.c, handles several connections at once

```
...
/* To listen any addresses on port 502 */
ctx = modbus_new_tcp(NULL, 502);
/* Handle until 10 established connections */
server_socket = modbus_tcp_listen(ctx, 10);
/* Clear the reference set of socket */
FD_ZERO(&refset);
/* Add the server socket */
FD_SET(server_socket, &refset);
if (select(server_socket + 1, &refset, NULL, NULL, NULL) == -1) {
}
...
close(server_socket);
modbus_free(ctx);
```

## SEE ALSO

[**modbus\_new\_tcp**(3)](/modbus_new_tcp/3.md) [**modbus\_tcp\_accept**(3)](/modbus_tcp_accept/3.md) [**modbus\_tcp\_pi\_listen**(3)](/modbus_tcp_pi_listen/3.md)

## AUTHORS

The libmodbus documentation was written by Stéphane Raimbault \<stephane.raimbault@gmail.com\>
