lwip-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[lwip-users] tcp packeting behaviour


From: Erkan Ersoy
Subject: [lwip-users] tcp packeting behaviour
Date: Fri, 26 Aug 2016 11:30:33 +0000 (UTC)

Hello

I am trying write a client that sends and recieve data any time. First I wrote it with netconn API, since It has to listen and write simultaniously. I decided to migrate non-blocking api but i couldn't find any example or document. So I migrate to socket API.

While I was using netconn API if I send bunch of data even though I am using netconn_write in a loop sending single character, tcp thread was sending them in a single TCP packet, (code is before I tried to implement non blocking and only sends data)
.......
while (isConnected == 1) {
//printf("is Connected = 1\n");

if(xQueueReceive(rs232QueueHandle,&serialData,300)){
//TODO: Gelen veriler TCP üzerinden yollanacak netconn_write
//printf("gelen: %c\n",serialData);
netconn_write(serialConn, &serialData, 1, NETCONN_COPY);

}

.......

But when I am using socket API it sends data as one character per tcp packet. I think there is a send  time out somewhere but i couldn't find it. I am thinking about putting socket receive and send separate threads I saw an example in lwip folder (rtp server example). (I saw people sent questions here but it is still unclear). As I understand below code works way slow then above code So there is no time to packet all in one packet. if I change if(queueReceive...) to while( queueReceive I get same behaviour but then read part is blocked. 

Should I increase tcpsend timeout (I dont know if there is setting somewhere) or sacrifice read part while writing or try to use seperate threads? 

while (1) {
if (DHCP_state == DHCP_ADDRESS_ASSIGNED || isNetworkUP == 1) {
printf("connecting to host...\n");
isConnected = lwip_connect(socket, (struct sockaddr*)&addr, sizeof(addr));
if(isConnected != 0){
printf("socket can not connect\n");
continue;
}

printf("Connected to host\n");

while(isConnected == 0){
   FD_ZERO(&readset);
   FD_ZERO(&writeset);
   FD_ZERO(&errset);

   FD_SET(socket, &readset);
   FD_SET(socket, &writeset);
   FD_SET(socket, &errset);

ret = lwip_select(socket+1,&readset,&writeset,&errset,0);
if(ret == 0)
continue;


if(ret < 0)
printf("hata\n");

if(FD_ISSET(socket,&readset)){
readCount = lwip_read(socket, &buffer, 80);
if(readCount < 0)
lwip_close(socket);
buffer[readCount]= 0;
printf(buffer);

}

if(FD_ISSET(socket,&errset)){
printf("error\n");
}

if(FD_ISSET(socket,&writeset)){
//TODO: Buraya queue üzerinden mesaj gönderme gelecek
//printf("write\n");
if(xQueueReceive(rs232QueueHandle,&serialData,0)){
//printf("gelen: %c\n",serialData);
//lwip_write(socket, &serialData, 1);
lwip_send(socket,&serialData, 1, NULL);
}
//lwip_write(socket,"erkan ersoy",11);

}
}

}
}

reply via email to

[Prev in Thread] Current Thread [Next in Thread]