blob: 9bda8aac2f65af343943a979a8045e909b763a73 [file] [log] [blame]
Brian Silvermana9cbe302013-03-12 18:41:44 -07001#ifndef AOS_COMMON_NETWORK_SOCKET_H_
2#define AOS_COMMON_NETWORK_SOCKET_H_
brians343bc112013-02-10 01:53:46 +00003
Austin Schuhf2a50ba2016-12-24 16:16:26 -08004#include <arpa/inet.h>
5#include <netinet/in.h>
6#include <stdio.h>
7#include <stdlib.h>
brians343bc112013-02-10 01:53:46 +00008#include <sys/socket.h>
9#include <sys/types.h>
brians343bc112013-02-10 01:53:46 +000010#include <unistd.h>
Austin Schuhf2a50ba2016-12-24 16:16:26 -080011#include <chrono>
Brian Silvermana9cbe302013-03-12 18:41:44 -070012
Brian Silverman66f079a2013-08-26 16:24:30 -070013#include "aos/common/network_port.h"
brians343bc112013-02-10 01:53:46 +000014
15namespace aos {
Brianc9f64552014-04-02 19:44:09 -070016namespace network {
brians343bc112013-02-10 01:53:46 +000017
18class Socket {
19 public:
20 int LastStatus() const { return last_ret_; }
21
Brian Silverman3204dd82013-03-12 18:42:01 -070022 int Send(const void *buf, int length);
23
24 // buf is where to put the data and length is the maximum amount of data to
25 // put in for all overloads.
26 // All overloads return how many bytes were received or -1 for error. 0 is a
27 // valid return value for all overloads.
28 // No timeout.
29 int Receive(void *buf, int length);
Brian Silverman3204dd82013-03-12 18:42:01 -070030 // timeout is relative
Austin Schuhf2a50ba2016-12-24 16:16:26 -080031 int Receive(void *buf, int length, ::std::chrono::microseconds timeout);
Brian Silverman3204dd82013-03-12 18:42:01 -070032
brians343bc112013-02-10 01:53:46 +000033 protected:
34 int Connect(NetworkPort port, const char *address, int type = SOCK_DGRAM);
35 Socket();
36 ~Socket();
37
38 // Resets socket_ and last_ret_.
39 void Reset();
40
Brian Silvermana9cbe302013-03-12 18:41:44 -070041 union {
brians343bc112013-02-10 01:53:46 +000042 sockaddr_in in;
43 sockaddr addr;
44 } addr_; // filled in by Connect
45
Brian Silvermana9cbe302013-03-12 18:41:44 -070046 int socket_;
brians343bc112013-02-10 01:53:46 +000047 int last_ret_;
48};
49
Brianc9f64552014-04-02 19:44:09 -070050} // namespace network
Brian Silvermana9cbe302013-03-12 18:41:44 -070051} // namespace aos
brians343bc112013-02-10 01:53:46 +000052
Brian Silvermana9cbe302013-03-12 18:41:44 -070053#endif // AOS_COMMON_NETWORK_SOCKET_H_