[Top][All Lists]

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

Re: [lwip-users] tcp_output() when processing "tcp_input_pcb"

From: Numb_Faith
Subject: Re: [lwip-users] tcp_output() when processing "tcp_input_pcb"
Date: Mon, 12 Aug 2013 02:24:05 -0700 (PDT)

Hi Bill,

Certainly, I can show my code. But I think that I set up the server
successfully. My problem is how to send packets immediatly(when I turn off
the nagle.) The "tcp_output()" is in the last line.

  * @brief  Initializes the tcp echo server
  * @param  None
  * @retval None
void tcp_echoserver_init(void)
  /* create new tcp pcb */
  tcp_echoserver_pcb = tcp_new();

  if (tcp_echoserver_pcb != NULL)
    err_t err;
    /* bind echo_pcb to port 7 (ECHO protocol) */
    err = tcp_bind(tcp_echoserver_pcb, IP_ADDR_ANY, 7);
    if (err == ERR_OK)
      /* start tcp listening for echo_pcb */
      tcp_echoserver_pcb = tcp_listen(tcp_echoserver_pcb);
      /* initialize LwIP tcp_accept callback function */
      tcp_accept(tcp_echoserver_pcb, tcp_echoserver_accept);
      /* deallocate the pcb */
      memp_free(MEMP_TCP_PCB, tcp_echoserver_pcb);
    printf("Can not create new pcb\n");

  * @brief  This function is the implementation of tcp_accept LwIP callback
  * @param  arg: not used
  * @param  newpcb: pointer on tcp_pcb struct for the newly created tcp
  * @param  err: not used 
  * @retval err_t: error status
static err_t tcp_echoserver_accept(void *arg, struct tcp_pcb *newpcb, err_t
  err_t ret_err;
  struct tcp_echoserver_struct *es;


  /* set priority for the newly accepted tcp connection newpcb */
  tcp_setprio(newpcb, TCP_PRIO_MIN);

  /* allocate structure es to maintain tcp connection informations */
  es = (struct tcp_echoserver_struct *)mem_malloc(sizeof(struct
  if (es != NULL)
    es->state = ES_ACCEPTED;
    es->pcb = newpcb;
    es->p = NULL;
    /* pass newly allocated es structure as argument to newpcb */
    tcp_arg(newpcb, es);
    /* initialize lwip tcp_recv callback function for newpcb  */ 
    tcp_recv(newpcb, tcp_echoserver_recv);
    /* initialize lwip tcp_err callback function for newpcb  */
    tcp_err(newpcb, tcp_echoserver_error);
    /* initialize lwip tcp_poll callback function for newpcb */
    tcp_poll(newpcb, tcp_echoserver_poll, 1);
    ret_err = ERR_OK;
    /*  close tcp connection */
    tcp_echoserver_connection_close(newpcb, es);
    /* return memory error */
    ret_err = ERR_MEM;

  return ret_err;  

  * @brief  This function is the implementation for tcp_recv LwIP callback
  * @param  arg: pointer on a argument for the tcp_pcb connection
  * @param  tpcb: pointer on the tcp_pcb connection
  * @param  pbuf: pointer on the received pbuf
  * @param  err: error information regarding the reveived pbuf
  * @retval err_t: error code
static err_t tcp_echoserver_recv(void *arg, struct tcp_pcb *tpcb, struct
pbuf *p, err_t err)
  struct tcp_echoserver_struct *es;
  err_t ret_err;

  LWIP_ASSERT("arg != NULL",arg != NULL);
  es = (struct tcp_echoserver_struct *)arg;

  tcp_write(tpcb, DataTest, sizeof(DataTest), 0x01);
  /tcp_output(tpcb);                            // return/

Best Regards,
Ray Li

View this message in context: 
Sent from the lwip-users mailing list archive at Nabble.com.

reply via email to

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