mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2024-11-19 05:10:40 +00:00
patch #6865 (SO_REUSEADDR for TCP): if tcp_pcb.flags has TF_REUSEADDR set, allow binding to endpoint in TIME_WAIT
This commit is contained in:
parent
c73b1b4fa2
commit
d3635c5eef
@ -19,6 +19,10 @@ HISTORY
|
|||||||
|
|
||||||
++ New features:
|
++ New features:
|
||||||
|
|
||||||
|
2010-02-12: Simon Goldschmidt/Jeff Barber
|
||||||
|
* tcp.c/h: patch #6865 (SO_REUSEADDR for TCP): if tcp_pcb.flags has
|
||||||
|
TF_REUSEADDR set, allow binding to endpoint in TIME_WAIT
|
||||||
|
|
||||||
2010-02-12: Simon Goldschmidt
|
2010-02-12: Simon Goldschmidt
|
||||||
* sys layer: task #10139 (Prefer statically allocated memory): converted
|
* sys layer: task #10139 (Prefer statically allocated memory): converted
|
||||||
mbox and semaphore functions to take pointers to sys_mbox_t/sys_sem_t;
|
mbox and semaphore functions to take pointers to sys_mbox_t/sys_sem_t;
|
||||||
|
@ -317,15 +317,19 @@ tcp_bind(struct tcp_pcb *pcb, ip_addr_t *ipaddr, u16_t port)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* @todo: until SO_REUSEADDR is implemented (see task #6995 on savannah),
|
/* Unless the REUSEADDR flag is set,
|
||||||
* we have to check the pcbs in TIME-WAIT state, also: */
|
* we have to check the pcbs in TIME-WAIT state, also: */
|
||||||
|
if ((pcb->flags & TF_REUSEADDR) == 0) {
|
||||||
for(cpcb = tcp_tw_pcbs; cpcb != NULL; cpcb = cpcb->next) {
|
for(cpcb = tcp_tw_pcbs; cpcb != NULL; cpcb = cpcb->next) {
|
||||||
if (cpcb->local_port == port) {
|
if (cpcb->local_port == port) {
|
||||||
if (ip_addr_cmp(&(cpcb->local_ip), ipaddr)) {
|
if (ip_addr_isany(&(cpcb->local_ip)) ||
|
||||||
|
ip_addr_isany(ipaddr) ||
|
||||||
|
ip_addr_cmp(&(cpcb->local_ip), ipaddr)) {
|
||||||
return ERR_USE;
|
return ERR_USE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!ip_addr_isany(ipaddr)) {
|
if (!ip_addr_isany(ipaddr)) {
|
||||||
pcb->local_ip = *ipaddr;
|
pcb->local_ip = *ipaddr;
|
||||||
|
@ -370,6 +370,7 @@ struct tcp_pcb {
|
|||||||
#define TF_ACK_NOW ((u8_t)0x02U) /* Immediate ACK. */
|
#define TF_ACK_NOW ((u8_t)0x02U) /* Immediate ACK. */
|
||||||
#define TF_INFR ((u8_t)0x04U) /* In fast recovery. */
|
#define TF_INFR ((u8_t)0x04U) /* In fast recovery. */
|
||||||
#define TF_TIMESTAMP ((u8_t)0x08U) /* Timestamp option enabled */
|
#define TF_TIMESTAMP ((u8_t)0x08U) /* Timestamp option enabled */
|
||||||
|
#define TF_REUSEADDR ((u8_t)0x10U) /* Bind to endpoint in TIME_WAIT */
|
||||||
#define TF_FIN ((u8_t)0x20U) /* Connection was closed locally (FIN segment enqueued). */
|
#define TF_FIN ((u8_t)0x20U) /* Connection was closed locally (FIN segment enqueued). */
|
||||||
#define TF_NODELAY ((u8_t)0x40U) /* Disable Nagle algorithm */
|
#define TF_NODELAY ((u8_t)0x40U) /* Disable Nagle algorithm */
|
||||||
#define TF_NAGLEMEMERR ((u8_t)0x80U) /* nagle enabled, memerr, try to output to prevent delayed ACK to happen */
|
#define TF_NAGLEMEMERR ((u8_t)0x80U) /* nagle enabled, memerr, try to output to prevent delayed ACK to happen */
|
||||||
|
Loading…
Reference in New Issue
Block a user