blob: 9bda8aac2f65af343943a979a8045e909b763a73 [file] [log] [blame]
#ifndef AOS_COMMON_NETWORK_SOCKET_H_
#define AOS_COMMON_NETWORK_SOCKET_H_
#include <arpa/inet.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <unistd.h>
#include <chrono>
#include "aos/common/network_port.h"
namespace aos {
namespace network {
class Socket {
public:
int LastStatus() const { return last_ret_; }
int Send(const void *buf, int length);
// buf is where to put the data and length is the maximum amount of data to
// put in for all overloads.
// All overloads return how many bytes were received or -1 for error. 0 is a
// valid return value for all overloads.
// No timeout.
int Receive(void *buf, int length);
// timeout is relative
int Receive(void *buf, int length, ::std::chrono::microseconds timeout);
protected:
int Connect(NetworkPort port, const char *address, int type = SOCK_DGRAM);
Socket();
~Socket();
// Resets socket_ and last_ret_.
void Reset();
union {
sockaddr_in in;
sockaddr addr;
} addr_; // filled in by Connect
int socket_;
int last_ret_;
};
} // namespace network
} // namespace aos
#endif // AOS_COMMON_NETWORK_SOCKET_H_