fixed a bug. tcp_listener_create was called incorrectly by microtcp_open
This commit is contained in:
+2
-2
@@ -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
|
||||
|
||||
@@ -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
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user