lwip-users
[Top][All Lists]
Advanced

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

[lwip-users] Help again with creation socket


From: Oscar F
Subject: [lwip-users] Help again with creation socket
Date: Fri, 9 Oct 2009 15:25:58 +0200

Hello,i have come back to create the socket ( only three now) iand i´m using an example of communication lwip in AVR32 EVK1100.

now i have the problem in the bind the second socket say me error.

what happend , have i need to change the value of lwipopt.h?

Thank
Oscar

the code

static char BufferRx[TAM_RX_RTU];
static char BufferTx[TAM_TX_RTU];
static int aSocket; //Accepted Socket. Static global for other task acce
static int lSocket; //Local Socket
static struct sockaddr_in sLocalAddr;
static struct sockaddr_in sRemoteAddr;
static int aSocket1; //Accepted Socket. Static global for other task acce
static int lSocket1; //Local Socket
static struct sockaddr_in sLocalAddr1;
static struct sockaddr_in sRemoteAddr1;


portTASK_FUNCTION( vBasicTFTPServer, pvParameters )
{
    //Local variables of function ==> maybe put global
        int i,result,nbytesRx;
        int PortConnection=0x1600;
        int PortConnection1=0x1500;
        long code_command,length_command;
        int maxfd;
        fd_set readset;


       
        //Create the NUM_SOCKET connection to wait the accept
        print_dbg(" Inicializando Socket  \n");


        //Create the socket
        lSocket = lwip_socket(AF_INET, SOCK_STREAM, 0);
        if (lSocket<0)
         return;

        //Create the socket
        lSocket1 = lwip_socket(AF_INET, SOCK_STREAM, 0);
        if (lSocket1<0)
         return;


        //Bind to this socket
        memset((char *)&sLocalAddr, 0, sizeof(sLocalAddr));
        sLocalAddr.sin_family = AF_INET;
        sLocalAddr.sin_len = sizeof(sLocalAddr);
        sLocalAddr.sin_addr.s_addr = htonl(INADDR_ANY); //!!!!CUIDADO SINO VALE CUALQUIER DIRECCION CAMBIAR!!!!
        sLocalAddr.sin_port = PortConnection; //Ports of the table

        if (lwip_bind(lSocket,(struct sockaddr *)&sLocalAddr, sizeof(sLocalAddr)) < 0)
         {
          //Error. Close the socket
          lwip_close(lSocket);
          print_dbg(" Error en bind \n");
          return;
         }

        //Bind to this socket
      
          memset((char *)&sLocalAddr1, 0, sizeof(sLocalAddr1));
                sLocalAddr.sin_family = AF_INET;
                sLocalAddr.sin_len = sizeof(sLocalAddr1);
                sLocalAddr.sin_addr.s_addr = htonl(INADDR_ANY); //!!!!CUIDADO SINO VALE CUALQUIER DIRECCION CAMBIAR!!!!
                sLocalAddr.sin_port = PortConnection1; //Ports of the table

                if (lwip_bind(lSocket1,(struct sockaddr *)&sLocalAddr1, sizeof(sLocalAddr1)) < 0)
                 {
                  //Error. Close the socket
                  lwip_close(lSocket1);
                  print_dbg(" Error en bind \n");
                  return;
                 }
         

        //Listen to the 8 socket.Maximum 1 connection for socket
        if ( lwip_listen(lSocket,4) != 0 )
         {
          lwip_close(lSocket);
          print_dbg(" Error en listen \n");
          return;
         }

        //Listen to the 8 socket.Maximum 1 connection for socket
      
                if ( lwip_listen(lSocket1,4) != 0 )
                 {
                  lwip_close(lSocket1);
                  print_dbg(" Error en listen \n");
                  return;
                 }


        //Wait for the accept connection

        print_dbg(" Socket preprarado para accept \n");
        aSocket = accept(lSocket,(struct sockaddr*)&sRemoteAddr,(socklen_t *)sizeof(sRemoteAddr));

        if (aSocket>0)
         {
          print_dbg("socket Aceptado: ");
          print_dbg_ulong(aSocket);
          print_dbg("\n socket Inicial: ");
          print_dbg_ulong(lSocket);
          print_dbg(" \n");
         }
        else
         {

          print_dbg(" Error en accept \n");
          return;
         }

        aSocket1 = accept(lSocket1,(struct sockaddr*)&sRemoteAddr1,(socklen_t *)sizeof(sRemoteAddr1));

                if (aSocket1>0)
                 {
                  print_dbg("socket Aceptado: ");
                  print_dbg_ulong(aSocket1);
                  print_dbg("\n socket Inicial: ");
                  print_dbg_ulong(lSocket1);
                  print_dbg(" \n");
                 }
                else
                 {

                  print_dbg(" Error en accept \n");
                  return;
                 }

     //Loop infinite into the task



     while(1){

                   FD_ZERO(&readset);
                   maxfd=0;
                   print_dbg(" Metemos el Sockets por donde podemos recibir para entrar en el select \n");
                     FD_SET(aSocket, &readset);
                      print_dbg("socket : ");
                      print_dbg_ulong(aSocket);
                      print_dbg("\n ");
                      if (aSocket> maxfd)
                       maxfd = aSocket;


                   // Check for received packets on configured sockets (blocking )
                   result = select(maxfd+1, &readset, NULL, NULL, NULL);

                   print_dbg("select ha entrado \n");

                   if (result > 0) //No error

                   {


the file lwipop.h

#ifndef __LWIPOPTS_H__
#define __LWIPOPTS_H__

/* Include user defined options first */
// #include "conf_eth.h"
#include "conf_lwip_threads.h"

#include "lwip/debug.h"

/* Define default values for unconfigured parameters. */
#define LWIP_NOASSERT 1 // To suppress some errors for now (no debug output)

/* These two control is reclaimer functions should be compiled
   in. Should always be turned on (1). */
#define MEM_RECLAIM             1
#define MEMP_RECLAIM            1


/* Platform specific locking */

/*
 * enable SYS_LIGHTWEIGHT_PROT in lwipopts.h if you want inter-task protection
 * for certain critical regions during buffer allocation, deallocation and memory
 * allocation and deallocation.
 */
#define SYS_LIGHTWEIGHT_PROT            1

/* ---------- Memory options ---------- */

/* MEM_ALIGNMENT: should be set to the alignment of the CPU for which
   lwIP is compiled. 4 byte alignment -> define MEM_ALIGNMENT to 4, 2
   byte alignment -> define MEM_ALIGNMENT to 2. */
#define MEM_ALIGNMENT           4

/* MEM_SIZE: the size of the heap memory. If the application will send
a lot of data that needs to be copied, this should be set high. */
#define MEM_SIZE                3 * 1024


/* MEMP_NUM_PBUF: the number of memp struct pbufs. If the application
   sends a lot of data out of ROM (or other static memory), this
   should be set high. */
#define MEMP_NUM_PBUF           6

/* Number of raw connection PCBs */
#define MEMP_NUM_RAW_PCB                1

#if (TFTP_USED == 1)
  /* ---------- UDP options ---------- */
  #define LWIP_UDP                1
  #define UDP_TTL                 255
  /* MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One
     per active UDP "connection". */

  #define MEMP_NUM_UDP_PCB        1
#else
  /* ---------- UDP options ---------- */
  #define LWIP_UDP                0
  #define UDP_TTL                 0
  /* MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One
     per active UDP "connection". */

  #define MEMP_NUM_UDP_PCB        0
#endif

/* MEMP_NUM_TCP_PCB: the number of simultaneously active TCP connections. */
#define MEMP_NUM_TCP_PCB        5
/* MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP connections. */
#define MEMP_NUM_TCP_PCB_LISTEN 5
/* MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP segments. */
#define MEMP_NUM_TCP_SEG        9
/* MEMP_NUM_SYS_TIMEOUT: the number of simulateously active timeouts. */
#define MEMP_NUM_SYS_TIMEOUT    6

/* The following four are used only with the sequential API and can be
   set to 0 if the application only will use the raw API. */
/* MEMP_NUM_NETBUF: the number of struct netbufs. */
#define MEMP_NUM_NETBUF         4
/* MEMP_NUM_NETCONN: the number of struct netconns. */
#define MEMP_NUM_NETCONN        5


/* ---------- Pbuf options ---------- */
/* PBUF_POOL_SIZE: the number of buffers in the pbuf pool. */

#define PBUF_POOL_SIZE          6

/* PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. */

#define PBUF_POOL_BUFSIZE       500

/* PBUF_LINK_HLEN: the number of bytes that should be allocated for a
   link level header. */
#define PBUF_LINK_HLEN          16

/* ---------- TCP options ---------- */
#define LWIP_TCP                1
#define TCP_TTL                 255
/* TCP receive window. */
#define TCP_WND                 1500
/* Controls if TCP should queue segments that arrive out of
   order. Define to 0 if your device is low on memory. */
#define TCP_QUEUE_OOSEQ         1

/* TCP Maximum segment size. */
#define TCP_MSS                 1500

/* TCP sender buffer space (bytes). */
#define TCP_SND_BUF             2150

/* TCP sender buffer space (pbufs). This must be at least = 2 *
   TCP_SND_BUF/TCP_MSS for things to work. */
#define TCP_SND_QUEUELEN        6 * TCP_SND_BUF/TCP_MSS



/* Maximum number of retransmissions of data segments. */
#define TCP_MAXRTX              12

/* Maximum number of retransmissions of SYN segments. */
#define TCP_SYNMAXRTX           4


/**
 * DEFAULT_RAW_RECVMBOX_SIZE: The mailbox size for the incoming packets on a
 * NETCONN_RAW. The queue size value itself is platform-dependent, but is passed
 * to sys_mbox_new() when the recvmbox is created.
 */
#define DEFAULT_RAW_RECVMBOX_SIZE       6

/**
 * DEFAULT_UDP_RECVMBOX_SIZE: The mailbox size for the incoming packets on a
 * NETCONN_UDP. The queue size value itself is platform-dependent, but is passed
 * to sys_mbox_new() when the recvmbox is created.
 */
#define DEFAULT_UDP_RECVMBOX_SIZE       6

/**
 * DEFAULT_TCP_RECVMBOX_SIZE: The mailbox size for the incoming packets on a
 * NETCONN_TCP. The queue size value itself is platform-dependent, but is passed
 * to sys_mbox_new() when the recvmbox is created.
 */
#define DEFAULT_TCP_RECVMBOX_SIZE       6


/**
 * DEFAULT_ACCEPTMBOX_SIZE: The mailbox size for the incoming connections.
 * The queue size value itself is platform-dependent, but is passed to
 * sys_mbox_new() when the acceptmbox is created.
 */
#define DEFAULT_ACCEPTMBOX_SIZE         6

/* ---------- ARP options ---------- */
#define ARP_TABLE_SIZE 10
#define ARP_QUEUEING 0

/* ---------- IP options ---------- */
/* Define IP_FORWARD to 1 if you wish to have the ability to forward
   IP packets across network interfaces. If you are going to run lwIP
   on a device with only one network interface, define this to 0. */
#define IP_FORWARD              0

/* If defined to 1, IP options are allowed (but not parsed). If
   defined to 0, all packets with IP options are dropped. */
#define IP_OPTIONS              1

/* ---------- ICMP options ---------- */
#define ICMP_TTL                255


/* ---------- DHCP options ---------- */
/* Define LWIP_DHCP to 1 if you want DHCP configuration of
   interfaces. DHCP is not implemented in lwIP 0.5.1, however, so
   turning this on does currently not work. */
#define LWIP_DHCP               0

/* 1 if you want to do an ARP check on the offered address
   (recommended). */
// #define DHCP_DOES_ARP_CHECK     1

/*
   ------------------------------------
   ---------- Thread options ----------
   ------------------------------------
*/
/**
 * TCPIP_THREAD_NAME: The name assigned to the main tcpip thread.
 */
#define TCPIP_THREAD_NAME              "TCP/IP"

/**
 * TCPIP_THREAD_STACKSIZE: The stack size used by the main tcpip thread.
 * The stack size value itself is platform-dependent, but is passed to
 * sys_thread_new() when the thread is created.
 */
#define TCPIP_THREAD_STACKSIZE          lwipINTERFACE_STACK_SIZE

/**
 * TCPIP_THREAD_PRIO: The priority assigned to the main tcpip thread.
 * The priority value itself is platform-dependent, but is passed to
 * sys_thread_new() when the thread is created.
 */
#define TCPIP_THREAD_PRIO               lwipINTERFACE_TASK_PRIORITY

/**
 * TCPIP_MBOX_SIZE: The mailbox size for the tcpip thread messages
 * The queue size value itself is platform-dependent, but is passed to
 * sys_mbox_new() when tcpip_init is called.
 */
#define TCPIP_MBOX_SIZE                 6

/**
 * SLIPIF_THREAD_NAME: The name assigned to the slipif_loop thread.
 */
#define SLIPIF_THREAD_NAME             "slipif"

/**
 * SLIP_THREAD_STACKSIZE: The stack size used by the slipif_loop thread.
 * The stack size value itself is platform-dependent, but is passed to
 * sys_thread_new() when the thread is created.
 */
#define SLIPIF_THREAD_STACKSIZE         configMINIMAL_STACK_SIZE

/**
 * SLIPIF_THREAD_PRIO: The priority assigned to the slipif_loop thread.
 * The priority value itself is platform-dependent, but is passed to
 * sys_thread_new() when the thread is created.
 */
#define SLIPIF_THREAD_PRIO              1

/**
 * PPP_THREAD_NAME: The name assigned to the pppMain thread.
 */
#define PPP_THREAD_NAME                "pppMain"

/**
 * PPP_THREAD_STACKSIZE: The stack size used by the pppMain thread.
 * The stack size value itself is platform-dependent, but is passed to
 * sys_thread_new() when the thread is created.
 */
#define PPP_THREAD_STACKSIZE            configMINIMAL_STACK_SIZE

/**
 * PPP_THREAD_PRIO: The priority assigned to the pppMain thread.
 * The priority value itself is platform-dependent, but is passed to
 * sys_thread_new() when the thread is created.
 */
#define PPP_THREAD_PRIO                 1

/**
 * DEFAULT_THREAD_NAME: The name assigned to any other lwIP thread.
 */
#define DEFAULT_THREAD_NAME            "lwIP"

/**
 * DEFAULT_THREAD_STACKSIZE: The stack size used by any other lwIP thread.
 * The stack size value itself is platform-dependent, but is passed to
 * sys_thread_new() when the thread is created.
 */
#define DEFAULT_THREAD_STACKSIZE        configMINIMAL_STACK_SIZE

/**
 * DEFAULT_THREAD_PRIO: The priority assigned to any other lwIP thread.
 * The priority value itself is platform-dependent, but is passed to
 * sys_thread_new() when the thread is created.
 */
#define DEFAULT_THREAD_PRIO             1


/* ---------- Statistics options ---------- */
#define LWIP_STATS 1


reply via email to

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