43 lines
		
	
	
		
			990 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			990 B
		
	
	
	
		
			C++
		
	
	
	
	
	
| #pragma once
 | |
| #include "Socket/Address.hpp"
 | |
| 
 | |
| namespace Chattr {
 | |
| 
 | |
| struct Address;
 | |
| 
 | |
| class Socket {
 | |
| public:
 | |
|     Socket() = default;
 | |
|     Socket(int domain, int type, int protocol);
 | |
|     ~Socket();
 | |
| 
 | |
|     int init(int domain, int type, int protocol);
 | |
|     void destruct();
 | |
| 
 | |
|     operator SOCKET();
 | |
|     void set(const SOCKET __sock, int __domain);
 | |
|     int setsockopt(int level, int optname, const char* optval, int optlen);
 | |
|     
 | |
|     int bind(Address __addr);
 | |
| 
 | |
|     int recvfrom(void *__restrict __buf, size_t __n, int __flags, struct Address& __addr);
 | |
|     int sendto(const void *__buf, size_t __n, int __flags, struct Address __addr);
 | |
| 
 | |
|     Socket(const Socket&);
 | |
|     Socket(Socket&&) noexcept;
 | |
|     Socket& operator=(const Socket&);
 | |
|     Socket& operator=(Socket&&) noexcept;
 | |
|     
 | |
|     struct Address bindAddr = {};
 | |
|     struct Address remoteAddr = {};
 | |
| 
 | |
|     int domain = 0;
 | |
|     SOCKET sock = INVALID_SOCKET;
 | |
|     
 | |
|     std::mutex readMutex;
 | |
|     std::mutex writeMutex;
 | |
| protected:
 | |
|     bool valid_ = false;
 | |
| };
 | |
| 
 | |
| } |