Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
9 years, 11 months ago.
Is there a way to check for data present in EthernetInterface UDPsocket?
I am using the Freescale K64F. I would like to use the EthernetInterface UDPsocket for Ethernet comms.
I want to be able to check if data is present at the socket, and have the program continue. If I use 'udps.receiveFrom(client, inbuf, sizeof(inbuf))' the program halts until there is some data to be received.
I see that the old Ethernet class in mbed has a function receive() which returns 0 if no data is present, and a separate read() function. How can I do this in EthernetInterface?
Thanks... David Jeffrey
1 Answer
9 years, 11 months ago.
Hi,
socket provides set_blocking() method, which should doi the trick
This is the implementation of receiveFrom() for UDP socket
int UDPSocket::receiveFrom(Endpoint &remote, char *buffer, int length) { if (_sock_fd < 0) return -1; if (!_blocking) { TimeInterval timeout(_timeout); if (wait_readable(timeout) != 0) return 0; } remote.reset_address(); socklen_t remoteHostLen = sizeof(remote._remoteHost); return lwip_recvfrom(_sock_fd, buffer, length, 0, (struct sockaddr*) &remote._remoteHost, &remoteHostLen); }