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

# knet\_send\_sync(3)

Synchronously send data to knet nodes.

## NAME

knet\_send\_sync - Synchronously send data to knet nodes.

## SYNOPSIS

```
#include <libknet.h>

int knet_send_sync(
    knet_handle_t  knet_h,
    const char    *buff,
    const size_t   buff_len,
    const int8_t   channel
);
```

## DESCRIPTION

knet\_send\_sync

knet\_h - pointer to knet\_handle\_t

buff - pointer to the buffer of data to send

buff\_len - length of data to send

channel - data channel to use (see [knet\_handle\_add\_datafd(3)](/knet_handle_add_datafd/3.md))

All knet RX/TX operations are async for performance reasons. There are applications that might need a sync version of data transmission and receive errors in case of failure to deliver to another host. knet\_send\_sync bypasses the whole TX async layer and delivers data directly to the link layer, and returns errors accordingly. knet\_send\_sync sends only one packet to one host at a time. It does NOT support multiple destinations or multicast packets. Decision is still based on dst\_host\_filter\_fn.

## RETURN VALUE

knet\_send\_sync returns 0 on success and -1 on error. In addition to normal sendmmsg errors, knet\_send\_sync can fail due to:

**ECANCELED**  - data forward is disabled

**EFAULT**     - dst\_host\_filter fatal error

**EINVAL**     - dst\_host\_filter did not provide dst\_host\_ids\_entries on unicast pckts

**E2BIG**      - dst\_host\_filter did return more than one dst\_host\_ids\_entries on unicast pckts

**ENOMSG**     - received unknown message type

**EHOSTDOWN**  - unicast pckt cannot be delivered because dest host is not connected yet

**ECHILD**     - crypto failed

**EAGAIN**     - sendmmsg was unable to send all messages and there was no progress during retry

**ENETDOWN**   - a packet filter was not installed (necessary for knet\_send\_sync, but not knet\_send)

## 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\_handle\_new\_ex*(3)](/knet_handle_new_ex/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\_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.
