Socket.hpp
1 //
2 // Created by xiong on 2022/6/9.
3 //
4 
5 #ifndef EMX_Socket_HPP
6 #define EMX_Socket_HPP
7 
8 #include "core/EmxTypeDef.hpp"
9 #include <sys/socket.h>
10 #include <sys/un.h>
11 
12 namespace Emx {
18  class Socket {
19  public:
20  Socket() {
21  m_sock = -1;
22  m_sendTimeout = -1;
23  m_recvTimeout = -1;
24  }
25 
26  virtual ~Socket() {
27  Close();
28  }
29 
31  virtual ErrCodeE Open() = 0;
32 
34  void Close() {
35  if (m_sock > 0) {
36  close(m_sock);
37  m_sock = -1;
38  }
39  }
40 
47  ErrCodeE Bind(const struct sockaddr *addr, socklen_t addrSize);
48 
50  ErrCodeE SetSendTimeOut(int32_t timeoutMs);
51 
53  ErrCodeE SetRecvTimeOut(int32_t timeoutMs);
54 
55  int m_sock;
58  };
59 
61  class SocketStream : public Socket {
62  public:
64 
65  virtual ~SocketStream() {};
66 
67  ErrCodeE Connect(const sockaddr *addr, int32_t addrSize, int32_t timeoutMs);
68 
69  ErrCodeE Send(const char *buffer, int32_t size, int32_t timeoutMs);
70 
71  ErrCodeE Recv(char *buffer, int32_t size, int32_t timeoutMs);
72  };
73 
75  class SocketDgram : public Socket {
76  public:
78 
79  virtual ~SocketDgram() {};
80 
81  ErrCodeE Send(const char *buffer, int32_t size, const sockaddr *addr, socklen_t addrLen, int32_t timeoutMs);
82 
83  ErrCodeE Recv(char *buffer, int32_t size, sockaddr *addr, socklen_t *addrLen, int32_t timeoutMs);
84  };
85 
87  class SocketUnStream : public SocketStream {
88  public:
90 
91  virtual ~SocketUnStream();
92 
93  ErrCodeE Open() override;
94 
95  static void MakeAddr(sockaddr_un &un, const char *path);
96  };
97 
99  class SocketUnDgram : public SocketDgram {
100  public:
102 
103  virtual ~SocketUnDgram();
104 
105  ErrCodeE Open() override;
106 
107  static void MakeAddr(sockaddr_un &un, const char *path);
108  };
110 }
111 
112 #endif //EMX_Socket_HPP
面相数据包的socket操作接口
Definition: Socket.hpp:75
SocketDgram()
Definition: Socket.hpp:77
ErrCodeE Send(const char *buffer, int32_t size, const sockaddr *addr, socklen_t addrLen, int32_t timeoutMs)
virtual ~SocketDgram()
Definition: Socket.hpp:79
ErrCodeE Recv(char *buffer, int32_t size, sockaddr *addr, socklen_t *addrLen, int32_t timeoutMs)
面向连接的socket操作接口
Definition: Socket.hpp:61
ErrCodeE Connect(const sockaddr *addr, int32_t addrSize, int32_t timeoutMs)
virtual ~SocketStream()
Definition: Socket.hpp:65
SocketStream()
Definition: Socket.hpp:63
ErrCodeE Send(const char *buffer, int32_t size, int32_t timeoutMs)
ErrCodeE Recv(char *buffer, int32_t size, int32_t timeoutMs)
面相数据包的AF_UNIX操作接口
Definition: Socket.hpp:99
static void MakeAddr(sockaddr_un &un, const char *path)
virtual ~SocketUnDgram()
SocketUnDgram()
Definition: Socket.hpp:101
ErrCodeE Open() override
面向连接的AF_UNIX操作接口
Definition: Socket.hpp:87
static void MakeAddr(sockaddr_un &un, const char *path)
virtual ~SocketUnStream()
ErrCodeE Open() override
SocketUnStream()
Definition: Socket.hpp:89
socket操作接口
Definition: Socket.hpp:18
virtual ~Socket()
Definition: Socket.hpp:26
ErrCodeE Bind(const struct sockaddr *addr, socklen_t addrSize)
绑定地址
Socket()
Definition: Socket.hpp:20
int m_recvTimeout
Definition: Socket.hpp:57
int m_sock
Definition: Socket.hpp:55
ErrCodeE SetSendTimeOut(int32_t timeoutMs)
设置发送超时时间
void Close()
关闭socket
Definition: Socket.hpp:34
int m_sendTimeout
Definition: Socket.hpp:56
ErrCodeE SetRecvTimeOut(int32_t timeoutMs)
设置接收超时时间
virtual ErrCodeE Open()=0
打开socket
ErrCodeE
错误码定义
Definition: EmxTypeDef.hpp:29
Definition: EmxGpio.hpp:10