
Me here wrote:
Hi,
I'm writing program with asio from 1.35.0 to read the data from a hardware device which sends data to my PC to port 7000. The sample below fails on Windows with exception code 10022, text "An invalid argument was supplied".
Where's the fault? Can someone help please?
A belated response, sorry. You need to bind the UDP socket to an endpoint before you can receive packets on it.
udp::endpoint sender_endpoint( udp::v4(), 7000 );
udp::socket socket(io_service); socket.open( udp::v4() );
Try adding: udp::endpoint local_endpoint(udp::v4(), 7000); socket.bind(local_endpoint); here. There's also a convenience constructor for udp::socket that does the open() and bind for you, so you could instead write: udp::endpoint local_endpoint(udp::v4(), 7000); udp::socket socket(io_service, local_endpoint); Furthermore ...
size_t len = socket.receive_from( boost::asio::buffer(packet), sender_endpoint);
any existing value in the sender_endpoint is ignored here, so you may as well leave the sender_endpoint as a default-constructed udp::endpoint object. Cheers, Chris