---
name: "knet_handle_new_ex"
section: "3"
platform: "linux"
package: "libknet-doc"
version: "1.31-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/knet_handle_new_ex"
---

# knet\_handle\_new\_ex(3)

create a new instance of a knet handle

## NAME

knet\_handle\_new\_ex - create a new instance of a knet handle

## SYNOPSIS

```
#include <libknet.h>

knet_handle_t knet_handle_new_ex(
    knet_node_id_t  host_id,
    int             log_fd,
    uint8_t         default_log_level,
    uint64_t        flags
);
```

## DESCRIPTION

knet\_handle\_new\_ex

host\_id - Each host in a knet is identified with a unique ID. when creating a new handle local host\_id must be specified (0 to UINT16\_MAX are all valid). It is the user's responsibility to check that the value is unique, or bad things might happen.

log\_fd - Write file descriptor. If set to a value \> 0, it will be used to write log packets from libknet to the application. Setting to 0 will disable logging from libknet. It is possible to enable logging at any given time (see logging API). Make sure to either read from this filedescriptor properly and/or mark it O\_NONBLOCK, otherwise if the fd becomes full, libknet could block. It is strongly encouraged to use pipes (ex: [pipe(2)](/pipe/2.md) or [pipe2(2)](/pipe2/2.md)) for logging fds due to the atomic nature of writes between fds. See also libknet test suite for reference and guidance. The caller is responsible for management of the FD. eg. knet will not close it when [knet\_handle\_free(3)](/knet_handle_free/3.md) is called

default\_log\_level - If logfd is specified, it will initialize all subsystems to log at default\_log\_level value. (see logging API)

flags - bitwise OR of some of the following flags: KNET\_HANDLE\_FLAG\_PRIVILEGED: use privileged operations setting up the communication sockets. If disabled, failure to acquire large enough socket buffers is ignored but logged. Inadequate buffers lead to poor performance.

## RETURN VALUE

on success, a new knet\_handle\_t is returned. on failure, NULL is returned and errno is set. knet-specific errno values: ENAMETOOLONG - socket buffers couldn't be set big enough and KNET\_HANDLE\_FLAG\_PRIVILEGED was specified ERANGE - buffer size readback returned unexpected type

## SEE ALSO

[*knet\_handle\_remove\_datafd*(3)](/knet_handle_remove_datafd/3.md), [*knet\_handle\_get\_stats*(3)](/knet_handle_get_stats/3.md), [*knet\_host\_add*(3)](/knet_host_add/3.md), [*knet\_handle\_pmtud\_setfreq*(3)](/knet_handle_pmtud_setfreq/3.md), [*knet\_handle\_pmtud\_get*(3)](/knet_handle_pmtud_get/3.md), [*knet\_handle\_crypto\_use\_config*(3)](/knet_handle_crypto_use_config/3.md), [*knet\_host\_get\_id\_by\_host\_name*(3)](/knet_host_get_id_by_host_name/3.md), [*knet\_host\_get\_status*(3)](/knet_host_get_status/3.md), [*knet\_link\_add\_acl*(3)](/knet_link_add_acl/3.md), [*knet\_link\_get\_pong\_count*(3)](/knet_link_get_pong_count/3.md), [*knet\_link\_get\_priority*(3)](/knet_link_get_priority/3.md), [*knet\_handle\_free*(3)](/knet_handle_free/3.md), [*knet\_handle\_enable\_sock\_notify*(3)](/knet_handle_enable_sock_notify/3.md), [*knet\_handle\_get\_datafd*(3)](/knet_handle_get_datafd/3.md), [*knet\_recv*(3)](/knet_recv/3.md), [*knet\_link\_get\_ping\_timers*(3)](/knet_link_get_ping_timers/3.md), [*knet\_log\_get\_subsystem\_id*(3)](/knet_log_get_subsystem_id/3.md), [*knet\_host\_remove*(3)](/knet_host_remove/3.md), [*knet\_host\_enable\_status\_change\_notify*(3)](/knet_host_enable_status_change_notify/3.md), [*knet\_strtoaddr*(3)](/knet_strtoaddr/3.md), [*knet\_link\_rm\_acl*(3)](/knet_link_rm_acl/3.md), [*knet\_send*(3)](/knet_send/3.md), [*knet\_handle\_enable\_pmtud\_notify*(3)](/knet_handle_enable_pmtud_notify/3.md), [*knet\_handle\_get\_transport\_reconnect\_interval*(3)](/knet_handle_get_transport_reconnect_interval/3.md), [*knet\_link\_get\_enable*(3)](/knet_link_get_enable/3.md), [*knet\_link\_set\_priority*(3)](/knet_link_set_priority/3.md), [*knet\_log\_set\_loglevel*(3)](/knet_log_set_loglevel/3.md), [*knet\_handle\_get\_channel*(3)](/knet_handle_get_channel/3.md), [*knet\_link\_get\_config*(3)](/knet_link_get_config/3.md), [*knet\_link\_get\_link\_list*(3)](/knet_link_get_link_list/3.md), [*knet\_get\_transport\_list*(3)](/knet_get_transport_list/3.md), [*knet\_get\_transport\_id\_by\_name*(3)](/knet_get_transport_id_by_name/3.md), [*knet\_log\_get\_loglevel\_id*(3)](/knet_log_get_loglevel_id/3.md), [*knet\_host\_set\_name*(3)](/knet_host_set_name/3.md), [*knet\_addrtostr*(3)](/knet_addrtostr/3.md), [*knet\_handle\_setfwd*(3)](/knet_handle_setfwd/3.md), [*knet\_get\_compress\_list*(3)](/knet_get_compress_list/3.md), [*knet\_host\_set\_policy*(3)](/knet_host_set_policy/3.md), [*knet\_get\_transport\_name\_by\_id*(3)](/knet_get_transport_name_by_id/3.md), [*knet\_handle\_enable\_filter*(3)](/knet_handle_enable_filter/3.md), [*knet\_handle\_crypto\_rx\_clear\_traffic*(3)](/knet_handle_crypto_rx_clear_traffic/3.md), [*knet\_handle\_compress*(3)](/knet_handle_compress/3.md), [*knet\_link\_get\_status*(3)](/knet_link_get_status/3.md), [*knet\_handle\_add\_datafd*(3)](/knet_handle_add_datafd/3.md), [*knet\_send\_sync*(3)](/knet_send_sync/3.md), [*knet\_log\_get\_loglevel\_name*(3)](/knet_log_get_loglevel_name/3.md), [*knet\_handle\_enable\_access\_lists*(3)](/knet_handle_enable_access_lists/3.md), [*knet\_host\_get\_host\_list*(3)](/knet_host_get_host_list/3.md), [*knet\_host\_get\_policy*(3)](/knet_host_get_policy/3.md), [*knet\_link\_set\_enable*(3)](/knet_link_set_enable/3.md), [*knet\_link\_set\_pong\_count*(3)](/knet_link_set_pong_count/3.md), [*knet\_log\_get\_subsystem\_name*(3)](/knet_log_get_subsystem_name/3.md), [*knet\_host\_get\_name\_by\_host\_id*(3)](/knet_host_get_name_by_host_id/3.md), [*knet\_link\_clear\_config*(3)](/knet_link_clear_config/3.md), [*knet\_log\_get\_loglevel*(3)](/knet_log_get_loglevel/3.md), [*knet\_handle\_new*(3)](/knet_handle_new/3.md), [*knet\_handle\_pmtud\_getfreq*(3)](/knet_handle_pmtud_getfreq/3.md), [*knet\_handle\_pmtud\_set*(3)](/knet_handle_pmtud_set/3.md), [*knet\_handle\_clear\_stats*(3)](/knet_handle_clear_stats/3.md), [*knet\_link\_set\_config*(3)](/knet_link_set_config/3.md), [*knet\_handle\_crypto\_set\_config*(3)](/knet_handle_crypto_set_config/3.md), [*knet\_handle\_crypto*(3)](/knet_handle_crypto/3.md), [*knet\_get\_crypto\_list*(3)](/knet_get_crypto_list/3.md), [*knet\_handle\_set\_transport\_reconnect\_interval*(3)](/knet_handle_set_transport_reconnect_interval/3.md), [*knet\_link\_clear\_acl*(3)](/knet_link_clear_acl/3.md), [*knet\_link\_set\_ping\_timers*(3)](/knet_link_set_ping_timers/3.md), [*knet\_link\_insert\_acl*(3)](/knet_link_insert_acl/3.md)

## COPYRIGHT

Copyright (C) 2010-2025 Red Hat, Inc. All rights reserved.
