fixed a bug. tcp_listener_create was called incorrectly by microtcp_open

This commit is contained in:
cozis
2023-05-22 23:57:34 +02:00
parent 04ce79bcf0
commit 59e6238348
8 changed files with 207 additions and 11 deletions
+2 -2
View File
@@ -826,8 +826,8 @@ microtcp_socket_t *microtcp_open(microtcp_t *mtcp, uint16_t port,
errcode2 = MICROTCP_ERRCODE_SOCKETLIMIT;
goto unlock_and_exit; // Socket limit reached
}
tcp_listener_t *listener = tcp_listener_create(&mtcp->tcp_state, port, socket, false, ready_to_accept);
tcp_listener_t *listener = tcp_listener_create(&mtcp->tcp_state, port, false, socket, ready_to_accept);
if (listener == NULL) {
// FIXME: This error code should be more specific,
// but the TCP module isn't stable yet
+7 -3
View File
@@ -563,8 +563,10 @@ void tcp_process_segment(tcp_state_t *state, ip_address_t sender,
move_from_non_established_list_to_non_accepted_queue(connection);
if (listener->callback_ready_to_accept)
if (listener->callback_ready_to_accept) {
assert(listener->callback_data);
listener->callback_ready_to_accept(listener->callback_data);
}
break;
case TCP_STATE_ESTAB:
@@ -698,9 +700,11 @@ tcp_listener_create(tcp_state_t *state, uint16_t port, bool reuse,
return NULL;
}
if (listener)
if (listener) {
listener->closed = false;
else {
listener->callback_data = callback_data;
listener->callback_ready_to_accept = callback_ready_to_accept;
} else {
// Pop a listener connection structure from the free list
if (state->free_listener_list == NULL) {
+11 -4
View File
@@ -1,13 +1,20 @@
#include <assert.h>
#ifndef MICROTCP_AMALGAMATION
#include "tcp_timer.h"
#endif
void tcp_timerset_init(tcp_timerset_t *set)
{
for (size_t i = 0; i < TCP_MAX_TIMEOUTS-1; i++)
set->pool[i].next = set->pool + i+1;
set->pool[TCP_MAX_TIMEOUTS-1].next = NULL;
set->free_list = set->pool;
static_assert(TCP_MAX_TIMERS >= 0);
if (TCP_MAX_TIMERS == 0)
set->free_list = NULL;
else {
for (size_t i = 0; i < TCP_MAX_TIMERS-1; i++)
set->pool[i].next = set->pool + i+1;
set->pool[TCP_MAX_TIMERS-1].next = NULL;
set->free_list = set->pool;
}
set->used_list = NULL;
}
+2
View File
@@ -1,6 +1,8 @@
#include <stdint.h>
#ifndef TCP_MAX_TIMERS
#define TCP_MAX_TIMERS 1024
#endif
typedef struct tcp_timerset_t tcp_timerset_t;
typedef struct tcp_timer_t tcp_timer_t;