From 0dbed5b91995c6fc9be476e371a7d96de6c75c10 Mon Sep 17 00:00:00 2001 From: George Oikonomou Date: Sat, 22 Nov 2014 21:49:05 +0100 Subject: [PATCH] Allow specifying a max outgoing segment size per TCP socket --- core/net/ip/tcp-socket.c | 5 +++-- core/net/ip/tcp-socket.h | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/core/net/ip/tcp-socket.c b/core/net/ip/tcp-socket.c index f914ae206..aa6e7656f 100644 --- a/core/net/ip/tcp-socket.c +++ b/core/net/ip/tcp-socket.c @@ -56,10 +56,10 @@ call_event(struct tcp_socket *s, tcp_socket_event_t event) static void senddata(struct tcp_socket *s) { - int len; + int len = MIN(s->output_data_max_seg, uip_mss()); if(s->output_data_len > 0) { - len = MIN(s->output_data_len, uip_mss()); + len = MIN(s->output_data_len, len); s->output_data_send_nxt = len; uip_send(s->output_data_ptr, len); } @@ -255,6 +255,7 @@ tcp_socket_register(struct tcp_socket *s, void *ptr, s->input_data_maxlen = input_databuf_len; s->output_data_ptr = output_databuf; s->output_data_maxlen = output_databuf_len; + s->output_data_max_seg = uip_mss(); s->input_callback = input_callback; s->event_callback = event_callback; list_add(socketlist, s); diff --git a/core/net/ip/tcp-socket.h b/core/net/ip/tcp-socket.h index aea678049..208bc8288 100644 --- a/core/net/ip/tcp-socket.h +++ b/core/net/ip/tcp-socket.h @@ -95,6 +95,7 @@ struct tcp_socket { uint16_t output_data_maxlen; uint16_t output_data_len; uint16_t output_data_send_nxt; + uint16_t output_data_max_seg; uint8_t flags; uint16_t listen_port;