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