Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help

       knet_handle_add_datafd -	Install	a file descriptor for communication.

       #include	<libknet.h>

       int knet_handle_add_datafd(
	   knet_handle_t  knet_h,
	   int		 *datafd,
	   int8_t	 *channel


       IMPORTANT:  In order to add datafd to knet, knet_handle_enable_sock_no-
       tify MUST be set	and be able to handle both errors  (-1)	 and  0	 bytes
       read / write from the provided datafd. On read error (< 0) from datafd,
       the socket is automatically removed from	polling	to avoid  spinning  on
       dead  sockets.  It  is  safe  to	call knet_handle_remove_datafd even on
       sockets that have been removed.

       knet_h -	pointer	to knet_handle_t

       *datafd - read/write file descriptor. knet will read data here to  send
       to  the other hosts and will write data received	from the network. Each
       data packet can be of max size KNET_MAX_PACKET_SIZE! Applications using
       knet_send/knet_recv  will  receive a proper error if the	packet size is
       not within boundaries. Applications using their own functions to	 write
       to the datafd should NOT	write more than	KNET_MAX_PACKET_SIZE.

       Please refer to handle.c	on how to set up a socketpair.

       datafd can be 0,	and knet_handle_add_datafd will	create a properly pop-
       ulated socket pair the same way as ping_test, or	a value	higher than 0.
       A  negative  number will	return an error. On exit knet_handle_free will
       take care to cleanup the	socketpair only	if they	have been  created  by

       It  is  possible	 to  pass  either sockets or normal fds. User provided
       datafd will be marked as	non-blocking and close-on-exec.

       *channel	- This value is	analogous to the tag in	VLAN tagging. A	 nega-
       tive  value will	auto-allocate a	channel. Setting a value between 0 and
       31 will try to allocate that specific channel (unless already in	use).

       It is possible to add up	to 32 datafds but be aware that	 each  one  of
       them must have a	receiving end on the other host.

       Example:	hostA channel 0	will be	delivered to datafd on hostB channel 0
       hostA channel 1 to hostB	channel	1.

       Each channel must have a	unique file descriptor.

       If your application could have 2	channels on one	host and  one  channel
       on another host,	then you can use dst_host_filter to manipulate channel
       values on TX and	RX.

       knet_handle_add_datafd returns

       0	  on success, *datafd will be populated	with a socket  if  the
       original	 value	was  0	or  if a specific fd was set, the value	is un-
       touched.	*channel will be populated with	a channel number if the	origi-
       nal  value was negative or the value is untouched if a specific channel
       was requested.

       -1	  on error and errno is	set.  *datafd  and  *channel  are  un-
       touched or empty.

       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_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_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_send_sync(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_link_clear_acl(3), knet_link_set_ping_timers(3),

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

kronosnet			  2020-10-19	     KNET_HANDLE_ADD_DATAFD(3)


Want to link to this manual page? Use this URL:

home | help