blob: b6d2c70e20a8bdd544c035267c83f6e32661057c [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
4#include <sys/socket.h>
5#include <sys/types.h>
6#include <netinet/in.h>
7#include <arpa/inet.h>
8#include <stdlib.h>
9#include <unistd.h>
10#include <stdio.h>
Brian Silvermana9cbe302013-03-12 18:41:44 -070011
brians343bc112013-02-10 01:53:46 +000012#include "aos/common/Configuration.h"
Brian Silvermana9cbe302013-03-12 18:41:44 -070013#include "aos/common/time.h"
brians343bc112013-02-10 01:53:46 +000014
15namespace aos {
16
17class Socket {
18 public:
19 int LastStatus() const { return last_ret_; }
20
21 int Send(const void *buf, int length);
22 int Recv(void *buf, int length);
23 int Recv(void *buf, int length, long usec); // returns 0 if timed out
24 protected:
25 int Connect(NetworkPort port, const char *address, int type = SOCK_DGRAM);
26 Socket();
27 ~Socket();
28
29 // Resets socket_ and last_ret_.
30 void Reset();
31
Brian Silvermana9cbe302013-03-12 18:41:44 -070032 union {
brians343bc112013-02-10 01:53:46 +000033 sockaddr_in in;
34 sockaddr addr;
35 } addr_; // filled in by Connect
36
Brian Silvermana9cbe302013-03-12 18:41:44 -070037 int socket_;
brians343bc112013-02-10 01:53:46 +000038 int last_ret_;
39};
40
Brian Silvermana9cbe302013-03-12 18:41:44 -070041} // namespace aos
brians343bc112013-02-10 01:53:46 +000042
Brian Silvermana9cbe302013-03-12 18:41:44 -070043#endif // AOS_COMMON_NETWORK_SOCKET_H_