KNET_SEND_SYNC(3)

πŸ’– KNET_SEND_SYNC πŸ’–

okay so you're reading the Kronosnet Programmer's Manual page for knet_send_sync(3) and honestly? you picked a good one bestie, this is the synchronous send, the one that actually waits and tells you when things went wrong instead of ghosting you like the async layer does. πŸ’…


✨ NAME ✨

knet_send_sync β€” synchronously send data to knet nodes. no cap, that's the whole job. πŸ¦‹


✨ 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 ✨

bestie, let's meet the cast first:

  • knet_h β€” pointer to knet_handle_t. your main character handle, the one holding everything together 🫢
  • buff β€” pointer to the buffer of data to send. the actual goods πŸ“¦
  • buff_len β€” length of data to send. how much of the goods, exactly πŸ“
  • channel β€” data channel to use. check knet_handle_add_datafd(3) for the deets, iykyk

okay now the tea β˜•. All knet RX/TX operations are async for performance reasons. that's the default vibe, it's fast, it's unbothered, it does not care about your feelings.

BUT. some applications genuinely need a sync version of data transmission, and they need to actually receive errors when delivery to another host fails. not just vibes and hope. and that's exactly what knet_send_sync is for, periodt.

so here's the iconique part: knet_send_sync bypasses the whole TX async layer and delivers data directly to the link layer, returning errors accordingly. it's giving direct, no middleman, no drama ✨

and now the boundaries, because we respect them:

  • knet_send_sync sends only one packet to one host at a time.
  • It does NOT support multiple destinations or multicast packets. 🚫
  • The decision is still based on dst_host_filter_fn.

✨ RETURN VALUE ✨

knet_send_sync returns 0 on success and -1 on error. slay when it's 0, sad girl hours when it's -1 😭

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)
🚨 lowkey important: that last one is a real difference between the two functions, bestie. knet_send_sync needs a packet filter installed and knet_send does not. don't come for me, it's in the docs.

✨ SEE ALSO ✨

the whole squad, fr fr β€” go read these when you're done here πŸ‘‘πŸŒΈ

knet_handle_remove_datafd(3), knet_handle_get_stats(3),
knet_host_add(3), knet_handle_pmtud_setfreq(3),
knet_handle_pmtud_get(3), knet_handle_crypto_use_config(3),
knet_host_get_id_by_host_name(3), knet_host_get_status(3),
knet_link_add_acl(3), knet_link_get_pong_count(3),
knet_link_get_priority(3), knet_handle_free(3),
knet_handle_enable_sock_notify(3), knet_handle_get_datafd(3),
knet_recv(3), knet_link_get_ping_timers(3),
knet_log_get_subsystem_id(3), knet_host_remove(3),
knet_host_enable_status_change_notify(3), knet_strtoaddr(3),
knet_link_rm_acl(3), knet_send(3), knet_handle_enable_pmtud_notify(3),
knet_get_crypto_cipher_list(3),
knet_handle_get_transport_reconnect_interval(3),
knet_link_get_enable(3), knet_link_set_priority(3),
knet_log_set_loglevel(3), knet_handle_get_channel(3),
knet_link_get_config(3), knet_link_get_link_list(3),
knet_get_crypto_hash_list(3), knet_get_transport_list(3),
knet_get_transport_id_by_name(3), knet_log_get_loglevel_id(3),
knet_handle_new_ex(3), knet_host_set_name(3), knet_addrtostr(3),
knet_handle_setfwd(3), knet_get_compress_list(3),
knet_host_set_policy(3), knet_get_transport_name_by_id(3),
knet_handle_enable_filter(3), knet_handle_crypto_rx_clear_traffic(3),
knet_handle_compress(3), knet_link_get_status(3),
knet_handle_add_datafd(3), knet_log_get_loglevel_name(3),
knet_handle_enable_access_lists(3), knet_host_get_host_list(3),
knet_host_get_policy(3), knet_link_set_enable(3),
knet_link_set_pong_count(3), knet_log_get_subsystem_name(3),
knet_host_get_name_by_host_id(3), knet_link_clear_config(3),
knet_log_get_loglevel(3), knet_handle_new(3),
knet_handle_pmtud_getfreq(3), knet_handle_pmtud_set(3),
knet_handle_clear_stats(3), knet_link_set_config(3),
knet_handle_crypto_set_config(3), knet_handle_crypto(3),
knet_get_crypto_list(3),
knet_handle_set_transport_reconnect_interval(3), knet_link_clear_acl(3),
knet_link_set_ping_timers(3), knet_handle_setprio_dscp(3),
knet_link_insert_acl(3)

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


that's the whole page, bestie, you ate it πŸ’…βœ¨

kronosnet Β· 2026-07-20 Β· KNET_SEND_SYNC(3) β€” mwah, go ship something iconic πŸŽ€πŸ’–

πŸ“¦ where this page comes from