lwip-users
[Top][All Lists]
Advanced

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

Re: [lwip-users] Raw Lwip - TCP application


From: Paul C
Subject: Re: [lwip-users] Raw Lwip - TCP application
Date: Wed, 22 Dec 2004 08:20:21 +1030

I have done a bit of experimentation and found it is 
best not to set the callbacks to null in the initialisation.
LWIP has suitable initial values that keep things working,
setting them to null just breaks things. 

         struct tcp_pcb *PotentialHost = tcp_new();
         tcp_accept(PotentialHost, a_new_connection);
// use lwip default     tcp_err(PotentialHost,    NULL);
//        "             tcp_poll(PotentialHost,   NULL, 1);
//        "             tcp_recv(PotentialHost,   NULL);
//        "             tcp_sent(PotentialHost,   NULL);
         tcp_arg(PotentialHost, NULL);

On Tue, 21 Dec 2004 13:25:04 +1030, "Paul C" <address@hidden>
said:
> Hi Everyone.
> 
> 
> I have been developing a TCP application that connects via tcp to 
> a server. I have been using code like this
> 
> // PSEUDO CODE #1
>         ushort svr_port = 1234;
>         struct ip_addr svr;
>         struct tcp_pcb *PotentialHost = tcp_new();
> 
>         if (PotentialHost == NULL) return;        
>         IP4_ADDR(&svr, 10.0.0.1);        
>         err = tcp_bind(PotentialHost, IP_ADDR_ANY, 0);
> 
>         tcp_accept(PotentialHost, a_new_connection); 
>         tcp_err(PotentialHost,    connection_err);
>         tcp_poll(PotentialHost,   connection_poll, 1);
>         tcp_recv(PotentialHost,   connection_recv);
>         tcp_sent(PotentialHost,   connection_sent);
>         tcp_arg(PotentialHost, (void *)StateInformation);
>         err = tcp_connect(PotentialHost, &svr, svr_port,
>         connection_start); 
> 
> 
> // END CODE #1
> 
> However I have a problem with a pbuf leak that appears to be caused when
> the
> server sends a TCP_RST when the connection is trying to open. (There is
> no
> leak normally, only when there have been multiple restarts. I don't use
> a
> clock
> to set the start sequence so the TCP start sequence can be inside the
> server's acceptable window for several seconds!) I think 
> that the problem is caused because although the connection is started
> the 
> connection is not "running" until the connection_start function is
> called. 
> However with Code #1 the connection_poll function can be called by the 
> tcp_slow_tmr(), which (in my case) has a tcp_close() inactivity timer.
> 
> So I am thinking that it is preferable to have the connection start
> function
> set these values after the connection is open. Like in CODE #2.
> 
> // PSEUDO CODE #2
> 
> connection_start( ...)
> {
>         tcp_err(PotentialHost,    connection_err);
>         tcp_poll(PotentialHost,   connection_poll, 1);
>         tcp_recv(PotentialHost,   connection_recv);
>         tcp_sent(PotentialHost,   connection_sent);
>         tcp_arg(PotentialHost, (void *)StateInformation);
> }
> 
> // AND start the connection like this
> 
>         ushort svr_port = 1234;
>         struct ip_addr svr;
>         struct tcp_pcb *PotentialHost = tcp_new();
> 
>         if (PotentialHost == NULL) return;        
>         IP4_ADDR(&svr, 10.0.0.1);        
>         err = tcp_bind(PotentialHost, IP_ADDR_ANY, 0);
> 
>         tcp_accept(PotentialHost, a_new_connection);
>         tcp_err(PotentialHost,    NULL);
>         tcp_poll(PotentialHost,   NULL, 1);
>         tcp_recv(PotentialHost,   NULL);
>         tcp_sent(PotentialHost,   NULL);
>         tcp_arg(PotentialHost, NULL);
>         err = tcp_connect(PotentialHost, &svr, svr_port,
>         connection_start); 
> 
> // END CODE #2
> 
> Does anyone have any comments on which way the code should be written?
> 
> Thanks
> 
> Paul Clarke
> 
> 
> _______________________________________________
> lwip-users mailing list
> address@hidden
> http://lists.nongnu.org/mailman/listinfo/lwip-users




reply via email to

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