- if (type == SILC_TASK_READ) {
- ret = silc_packet_receive(sock);
- if (ret < 0)
- return;
-
- if (ret == 0) {
- silc_net_close_connection(sock->sock);
- silc_schedule_unset_listen_fd(server->schedule, sock->sock);
- silc_free(server->sessions[sock->sock]);
- server->sessions[sock->sock] = NULL;
- silc_socket_free(sock);
- return;
- }
-
- silc_packet_receive_process(sock, FALSE, NULL, NULL, 0, packet_parse,
- server);
- }
-}
-
-SILC_TASK_CALLBACK(accept_connection)
-{
- Server server = (Server)context;
- SilcSocketConnection sc;
- int sock;
-
- sock = silc_net_accept_connection(server->sock);
- if (sock < 0)
- exit(1);
-
- silc_net_set_socket_nonblock(sock);
- silc_net_set_socket_opt(sock, SOL_SOCKET, SO_REUSEADDR, 1);
-
- silc_socket_alloc(sock, 0, NULL, &sc);
- server->sessions[sock] = silc_calloc(1, sizeof(server->sessions[0]));
- server->sessions[sock]->sock = sc;
- server->sessions[sock]->server = server;
- server->sftp[sock] =
- silc_sftp_server_start(send_packet, server->sessions[sock],
- server->fs);
- silc_schedule_task_add(server->schedule, sock, packet_process,
- server, 0, 0, SILC_TASK_GENERIC,
- SILC_TASK_PRI_NORMAL);