Hi,
I have some problems with the UDP sockets. I'm able to send data on one CC3100 and receive the data on another CC3100. But I'm unable to send and receive data on the same device.
I have the following working example
static void Working() { uint8_t i; uint8_t buffer[10]; int16_t mySocket = 0; int16_t status; SlSockAddrIn_t serverAddress; uint32_t ipAdress = 0xc0a80136; // 192.168.1.54 // Address to send to server serverAddress.sin_family = SL_AF_INET; serverAddress.sin_port = sl_Htons((UINT16) 80); serverAddress.sin_addr.s_addr = sl_Htonl((UINT32) ipAdress); // Local Address mySocket = sl_Socket(SL_AF_INET, SL_SOCK_DGRAM, 0); if (mySocket < 0) { // Error return; } for (i = 0; i < 100; i++) { // Send Packet status = sl_SendTo(mySocket, buffer, 10, 0, (SlSockAddr_t *) &serverAddress, sizeof(SlSockAddrIn_t)); if (status < -1) { // Error return; } } sl_Close(mySocket); }
When I try to receive data on the same socket the sl_SendTo fails. It already fails when I bind the local Address (for receiving) to the socket:
static void NonWorking() { uint8_t i; uint8_t buffer[10]; int16_t mySocket = 0; int16_t status; SlSockAddrIn_t localAddress, serverAddress; uint32_t ipAdress = 0xc0a80136; // 192.168.1.54 // Address to send to server serverAddress.sin_family = SL_AF_INET; serverAddress.sin_port = sl_Htons((UINT16) 80); serverAddress.sin_addr.s_addr = sl_Htonl((UINT32) ipAdress); // Local Address localAddress.sin_family = SL_AF_INET; localAddress.sin_port = sl_Htons((UINT16) 80); localAddress.sin_addr.s_addr = htonl(SL_INADDR_ANY); mySocket = sl_Socket(SL_AF_INET, SL_SOCK_DGRAM, 0); if (mySocket < 0) { // Error return; } status = sl_Bind(mySocket, (SlSockAddr_t *) &localAddress, sizeof(SlSockAddrIn_t)); if (status < -1) { return; } for (i = 0; i < 100; i++) { // Send Packet status = sl_SendTo(mySocket, buffer, 10, 0, (SlSockAddr_t *) &serverAddress, sizeof(SlSockAddrIn_t)); // This always fails! if (status < -1) { // Error return; } // Receive // TODO } sl_Close(mySocket); }
I can get the sample above working by commenting out the sl_Bind line.
Any hints?
Thanks
Dave