+ SilcNetServer server = context;
+
+ if (status != SILC_SOCKET_OK)
+ return;
+
+ server->callback(SILC_NET_OK, stream, server->context);
+}
+
+/* Accept incoming connection and notify upper layer */
+
+SILC_TASK_CALLBACK(silc_net_accept)
+{
+ SilcNetServer server = context;
+ int sock;
+
+ SILC_LOG_DEBUG(("Accepting new connection"));
+
+ sock = silc_net_accept_connection(fd);
+ if (sock < 0)
+ return;
+
+ /* Set socket options */
+ silc_net_set_socket_nonblock(sock);
+ silc_net_set_socket_opt(sock, SOL_SOCKET, SO_REUSEADDR, 1);
+
+ /* Create socket stream */
+ silc_socket_stream_create(sock, TRUE, server->require_fqdn, schedule,
+ silc_net_accept_stream, server);
+}
+
+/* Create network listener */
+
+SilcNetServer
+silc_net_create_server(const char **local_ip_addr, SilcUInt32 local_ip_count,
+ int port, SilcBool require_fqdn, SilcSchedule schedule,
+ SilcNetCallback callback, void *context)
+{
+ SilcNetServer netserver = NULL;