blob: 4c0437b95acad112cb271b12f0608be19dbfb6a8 [file] [log] [blame]
Brian Silverman4acae812016-03-14 13:16:19 -04001#include "aos/vision/events/udp.h"
2
3#include <string.h>
4
5#include "aos/common/logging/logging.h"
6
7namespace aos {
Parker Schuh2cd173d2017-01-28 00:12:01 -08008namespace events {
Brian Silverman4acae812016-03-14 13:16:19 -04009
Parker Schuh2cd173d2017-01-28 00:12:01 -080010TXUdpSocket::TXUdpSocket(const std::string &ip_addr, int port)
Brian Silverman4acae812016-03-14 13:16:19 -040011 : fd_(PCHECK(socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))) {
Brian Silverman2ccf8c52016-03-15 00:22:26 -040012 sockaddr_in destination_in;
13 memset(&destination_in, 0, sizeof(destination_in));
Brian Silverman4acae812016-03-14 13:16:19 -040014 destination_in.sin_family = AF_INET;
15 destination_in.sin_port = htons(port);
Parker Schuh2cd173d2017-01-28 00:12:01 -080016 if (inet_aton(ip_addr.c_str(), &destination_in.sin_addr) == 0) {
17 LOG(FATAL, "invalid IP address %s\n", ip_addr.c_str());
Brian Silverman4acae812016-03-14 13:16:19 -040018 }
19
20 PCHECK(connect(fd_.get(), reinterpret_cast<sockaddr *>(&destination_in),
21 sizeof(destination_in)));
22}
23
Parker Schuh2cd173d2017-01-28 00:12:01 -080024int TXUdpSocket::Send(const char *data, int size) {
Parker Schuh309dd722017-02-25 11:31:18 -080025 // Don't fail on send. If no one is connected that is fine.
26 return send(fd_.get(), data, size, 0);
Brian Silverman4acae812016-03-14 13:16:19 -040027}
28
29RXUdpSocket::RXUdpSocket(int port)
30 : fd_(PCHECK(socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))) {
Brian Silverman2ccf8c52016-03-15 00:22:26 -040031 sockaddr_in bind_address;
32 memset(&bind_address, 0, sizeof(bind_address));
Brian Silverman4acae812016-03-14 13:16:19 -040033
34 bind_address.sin_family = AF_INET;
35 bind_address.sin_port = htons(port);
36 bind_address.sin_addr.s_addr = htonl(INADDR_ANY);
37
38 PCHECK(bind(fd_.get(), reinterpret_cast<sockaddr *>(&bind_address),
39 sizeof(bind_address)));
40}
41
42int RXUdpSocket::Recv(void *data, int size) {
43 return PCHECK(recv(fd_.get(), static_cast<char *>(data), size, 0));
44}
45
Parker Schuh2cd173d2017-01-28 00:12:01 -080046} // namespace events
Brian Silverman4acae812016-03-14 13:16:19 -040047} // namespace aos