The send works fine, but I can't receive data. recvfrom() either waits forever, or returns -1 (when using MSG_DONTWAIT for non-blocking reads)
Here's the init code:
Code: Select all
static int sock = -1;
struct sockaddr_in eth_tx_addr;
struct sockaddr_in eth_rx_addr;
lwipInit(NULL);
sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (sock == -1) {
return -1;
}
/* broadcast */
int broadcast = 1;
if (setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &broadcast, sizeof(broadcast)) < 0) {
close(sock);
return -1;
}
memset(ð_rx_addr, 0, sizeof(eth_rx_addr));
memset(ð_tx_addr, 0, sizeof(eth_tx_addr));
eth_tx_addr.sin_family = AF_INET;
eth_tx_addr.sin_port = htons(1234);
eth_tx_addr.sin_addr.s_addr = htonl(INADDR_BROADCAST);
eth_rx_addr.sin_family = AF_INET;
eth_rx_addr.sin_port = htons(1234);
eth_rx_addr.sin_addr.s_addr = htonl(INADDR_ANY);
if (bind(sock, (struct sockaddr *) ð_rx_addr, sizeof(eth_rx_addr)) < 0) {
close(sock);
return -1;
}
The send (which works fine):
Code: Select all
sendto(sock, xmit_buf, len, 0, (struct sockaddr*) ð_tx_addr, sizeof(eth_tx_addr));
The receive (which currently doesn't work):
Code: Select all
uint8_t recv_buf[4095];
int len = recvfrom(sock, recv_buf, sizeof(recv_buf), MSG_DONTWAIT, (struct sockaddr*) ð_rx_addr, (socklen_t *)sizeof(eth_rx_addr));
I'm able to see the data in wireshark + I can successfully ping the embedded device, so I can rule out any hardware issues.