lwip-users
[Top][All Lists]
Advanced

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

[lwip-users] UDP broadcast not working - Socket API


From: Daniel Berenguer
Subject: [lwip-users] UDP broadcast not working - Socket API
Date: Fri, 19 Jun 2009 13:00:22 +0200

Hi all,

I'm trying to use the UDP broadcast example posted here:
http://www.ultimaserial.com/avr_lwip_udp.html
under FreeRTOS+lwIP on my Luminary LM3S8962 platform. This is the code:

main.c:

...
void udpThread(void *pvParameters)
{
        int lSocket;
        struct sockaddr_in sLocalAddr, sDestAddr;
        char reply[]="testing";
        char buffer[1024];
        int nbytes;
        int i;

        lSocket = lwip_socket(AF_INET, SOCK_DGRAM, 0);

        memset((char *)&sLocalAddr, 0, sizeof(sLocalAddr));
        memset((char *)&sDestAddr, 0, sizeof(sDestAddr));

        // Destination
        sDestAddr.sin_family = AF_INET;
        sDestAddr.sin_len = sizeof(sDestAddr);
        sDestAddr.sin_addr.s_addr = htonl(INADDR_BROADCAST);
        sDestAddr.sin_port = 1234;

        // Source
        sLocalAddr.sin_family = AF_INET;
        sLocalAddr.sin_len = sizeof(sLocalAddr);
        sLocalAddr.sin_addr.s_addr = htonl(INADDR_ANY);
        sLocalAddr.sin_port = 1235;

        lwip_bind(lSocket, (struct sockaddr *)&sLocalAddr, sizeof(sLocalAddr));

        while (1)
        {
                nbytes=lwip_recv(lSocket, buffer, sizeof(buffer),8);
                if (nbytes>0)
                {
                        lwip_sendto(lSocket, buffer, nbytes, 0, (struct sockaddr
*)&sDestAddr, sizeof(sDestAddr));
                }

                lwip_sendto(lSocket, reply, sizeof(reply), 0, (struct sockaddr
*)&sDestAddr, sizeof(sDestAddr));
                vTaskDelay(200);  //some delay!
        }
        lwip_close(lSocket);
}

...

int main(int argc, char *argv[])
{
        prvSetupHardware();

        // Initial text message
        RIT128x96x4StringDraw("FreeRTOS adapted for", 5, 0, 15);
        RIT128x96x4StringDraw(" Stellaris LM3S8962", 0, 10, 15);

        xTaskCreate(ethernetThread,"ethernet", 1000, NULL, 3, NULL);
        xTaskCreate(udpThread,"udp", 1000, NULL, 3, NULL);

        vTaskStartScheduler();

        for(;;)
        {
        }
}

In order to compile the above code, I changed lwipopts.h as follows:

#define LWIP_SOCKET                                  1
#define LWIP_COMPAT_SOCKETS                  1
#define LWIP_POSIX_SOCKETS_IO_NAMES     1

As result, the program builds correctly, the "udpThread" task is
started but no UDP message is sent on port 1234. This makes me think
that there are some other options to be enabled elsewhere. I decided
to use the BSD socket API just because I'm familiar to it but this is
the first time I work with lwIP. Please feel free to post your
comments and suggestions.

Thanks in advance for your help,

Daniel.




reply via email to

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