diff --git a/src/server.c b/src/server.c index afae5bc..99f9d30 100644 --- a/src/server.c +++ b/src/server.c @@ -1359,20 +1359,32 @@ static int handle_dm(patty_ax25_server *server, patty_ax25_if *iface, patty_ax25_sock *sock, patty_ax25_frame *frame) { - int client; - - if (sock == NULL || sock->state != PATTY_AX25_SOCK_PENDING_CONNECT) { + if (sock == NULL) { return 0; } - if ((client = client_by_sock(server, sock)) < 0) { - goto error_client_by_sock; + switch (sock->state) { + case PATTY_AX25_SOCK_PENDING_CONNECT: { + int client; + + if ((client = client_by_sock(server, sock)) < 0) { + goto error_client_by_sock; + } + + patty_ax25_sock_reset(sock); + + return respond_connect(client, -1, ECONNREFUSED); + } + + case PATTY_AX25_SOCK_PENDING_DISCONNECT: + patty_timer_stop(&sock->timer_t1); + + return sock_close(server, sock); + + default: + break; } - patty_ax25_sock_reset(sock); - - return respond_connect(client, -1, ECONNREFUSED); - error_client_by_sock: return -1; }