|
From: | Kranti P |
Subject: | [lwip-users] LWIP server fails if we connect multiple clients |
Date: | Mon, 29 Apr 2013 11:26:08 +0530 |
Hi All, I am facing problem when I connect multiple clients to
lwip server. It works fine for single client. When I connect multiple clients, after some time I get,
tcp_write out of memory error. Clients having interframe delay 10ms. Please suggest me a solution. My opt.h settings are as below, #define
NO_SYS
1 #define
TCP_TMR_INTERVAL 250 Server
code: signed int prvxMBTCPPortReceive(void
*arg, struct tcp_pcb *pxPCB, struct pbuf *p, signed int Err) { unsigned
char *pModbusHeader; u16_t
len; signed
int Error; tcp_nagle_disable(pxPCB); if(
Err != ERR_OK ) { return
Err; } if( p == NULL )
// If pbuf is NULL then remote end has closed connection. { prvvMBPortReleaseClient(
pxPCB ); return
ERR_OK; } len
= p->tot_len; pModbusHeader
= p->payload; MODTCP1
= ((struct mod_tcp_hdr1 *)pModbusHeader); Trans_id
= MODTCP1->trans_id; Proto_ID
= MODTCP1->proto_id; Len
= MODTCP1->len; tcp_recved(pxPCB,
p->len); tcp_tmr(); memcpy(
Comm3Buff, pModbusHeader + 6, (unsigned short) *(pModbusHeader + 5) ); ReceiveBuffLength3
= len - 6; ProcessSerialIntr3(); //pcb->snd_queuelen
=0x00; MODTCP1
= ((struct mod_tcp_hdr1 *)&RxBuff[usTCPBufPos]); MODTCP1->trans_id
= Trans_id; MODTCP1->proto_id
= 0; MODTCP1->len
= htons((unsigned short)(FrameLength3-1)); memcpy(
&RxBuff[usTCPBufPos + 6], Comm3Buff, (unsigned short) (FrameLength3 - 1) ); if(
(Error = tcp_write( pxPCB, RxBuff, (unsigned short) (6+FrameLength3-1), 01 ))
== ERR_OK ) { (
void )tcp_output( pxPCB ); //Make
sure data gets sent immediately } else { prvvMBPortReleaseClient(
pxPCB ); //
Drop the connection in case of an write error. } usTCPBufPos
= 0; //
Reset the buffer. pbuf_free(
p ); return
ERR_OK; } Waiting for your reply, Thanks & Regards, Kranti Patil, Embedded Engineer, REPL
| PUNE | |
[Prev in Thread] | Current Thread | [Next in Thread] |