+/****f* silcutil/SilcNetAPI/silc_net_tcp_create_listener
+ *
+ * SYNOPSIS
+ *
+ * SilcNetListener
+ * silc_net_tcp_create_listener(const char **local_ip_addr,
+ * SilcUInt32 local_ip_count, int port,
+ * SilcBool lookup, SilcBool require_fqdn,
+ * SilcSchedule schedule,
+ * SilcNetCallback callback, void *context);
+ *
+ * DESCRIPTION
+ *
+ * This function creates TCP listener. This is used to create network
+ * listener for incoming connections, and `callback' will be called
+ * everytime new connection is received. If `local_ip_addr' is NULL any
+ * address is used. If provided it can be used bind the listener to
+ * `local_ip_count' many IP addresses provided in `local_ip_addr' table.
+ * On success returns the SilcNetListener context, or NULL on error.
+ * If `require_fqdn' is TRUE the listener will require that the incoming
+ * connection has FQDN to be able to connect. If the `lookup' is TRUE
+ * then the incoming connection hostname will be resolved. If the `port'
+ * is zero (0), operating system will define it automatically.
+ *
+ * The `callback' always delivers valid new stream. It is not called
+ * with an error status.
+ *
+ ***/
+SilcNetListener
+silc_net_tcp_create_listener(const char **local_ip_addr,
+ SilcUInt32 local_ip_count, int port,
+ SilcBool lookup, SilcBool require_fqdn,
+ SilcSchedule schedule,
+ SilcNetCallback callback, void *context);
+
+/****f* silcutil/SilcNetAPI/silc_net_listener_get_port
+ *
+ * SYNOPSIS
+ *
+ * SilcUInt16 silc_net_listener_get_port(SilcNetListener listener);
+ *
+ * DESCRIPTION
+ *
+ * Returns the ports to where the `listener' is bound. This can be used
+ * to get the port if none was specified in silc_net_tcp_create_listener.
+ * Returns an array of ports of size of `port_count'. The caller must
+ * free the array with silc_free. There are as many ports in the array
+ * as there were IP addresses provided in silc_net_tcp_create_listener.
+ *
+ ***/
+SilcUInt16 *silc_net_listener_get_port(SilcNetListener listener,
+ SilcUInt32 *port_count);