i saw this piece of code in tcp_write:
....
err = tcp_write(conn->pcb.tcp, dataptr, len, conn->write_msg->
msg.w.apiflags);
LWIP_ASSERT("do_writemore: invalid length!", ((conn->write_offset + len)
<= conn->write_msg->msg.w.len));
if (err == ERR_OK) {
conn->write_offset += len;
if (conn->write_offset == conn->write_msg->msg.w.len) {
/* everything was written */
write_finished = 1;
conn->write_msg = NULL;
conn->write_offset = 0;
}
err = tcp_output_nagle(conn->pcb.tcp);
conn->err = err;
if ((err == ERR_OK) && (tcp_sndbuf(conn->pcb.tcp) <= TCP_SNDLOWAT)) {
API_EVENT(conn, NETCONN_EVT_SENDMINUS, len);
}
} else if (err == ERR_MEM) {
/* tcp_enqueue returned ERR_MEM, try tcp_output anyway */
err = tcp_output(conn->pcb.tcp);
#if LWIP_TCPIP_CORE_LOCKING
conn->write_delayed = 1;
#endif
} else {
/* if ERR_MEM, we wait for sent_tcp or poll_tcp to be
called <--------- wrong comment??? ERR_CONN
instead ERR_MEM
on other errors we don't try writing any more */
conn->err = err;
write_finished = 1;
}
if (write_finished) {
/* everything was written: set back connection state
and back to application task */
....
first, i suppose there is a wrong comment (see above)
second, i propose a patch (but i'm not sure);
if tcp_enqueue returned ERR_MEM, instead of try tcp_output anyway, exit
using
conn->err = err;
write_finished = 1;
what do you think???
Piero.
2008/3/19, Piero 74 <[EMAIL PROTECTED]>:
>
> i didn't understand this suggest:
>
> #define tcp_accept_data(pcb) ((pcb)->snd_buf > 0 * (((pcb)->queuelen <
> TCP_SND_QUEUELEN))
>
> 0 * (((pcb)->queuelen < TCP_SND_QUEUELEN) is always 0, right???
>
> where have i to add this macro??
>
>
>
_______________________________________________
lwip-users mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/lwip-users