2
3
4
5
18 if(::closesocket(m_SocketFd) < 0)
21 ss <<
"Socket::Close failed, socket fd: " << m_SocketFd <<
" Error: " << WSAGetLastError();
23 SPICES_CORE_CRITICAL(ss.str())
31 SOCKET sockfd = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
40 if (::bind(m_SocketFd, (sockaddr*)localAddress.GetSockAddress(),
sizeof(sockaddr_in)) < 0)
43 ss <<
"Socket::BindAddress failed, socket fd: " << m_SocketFd <<
" Error: " << WSAGetLastError();
45 SPICES_CORE_CRITICAL(ss.str())
53 if (::listen(m_SocketFd, SOMAXCONN) < 0)
56 ss <<
"Socket::Listen failed, socket fd: " << m_SocketFd <<
" Error: " << WSAGetLastError();
58 SPICES_CORE_CRITICAL(ss.str())
66 int r = ::connect(m_SocketFd,
reinterpret_cast<sockaddr*>(connectAddress->GetSockAddress()),
sizeof(sockaddr_in));
71 if (WSAGetLastError() == 10035)
77 ss <<
"Socket::Connect failed, socket fd: " << m_SocketFd <<
" Error: " << WSAGetLastError();
79 SPICES_CORE_CRITICAL(ss.str())
87 sockaddr_in address = {};
88 socklen_t len =
sizeof(address);
89 const SOCKET connectFd = ::accept(m_SocketFd,
reinterpret_cast<sockaddr*>(&address), &len);
93 if(ioctlsocket(m_SocketFd, FIONBIO, &mode) == SOCKET_ERROR)
96 ss <<
"Socket::Accept failed, socket fd: " << m_SocketFd <<
" Error: " << WSAGetLastError();
98 SPICES_CORE_CRITICAL(ss.str())
101 peerAddress->SetSockAddress(address);
110 if (::send(m_SocketFd, data.c_str(), data.size(), 0) < 0)
112 std::stringstream ss;
113 ss <<
"Socket::Send error, socket fd: " << m_SocketFd <<
" Error: " << WSAGetLastError();
115 SPICES_CORE_CRITICAL(ss.str())
124 int bytes = ::recv(m_SocketFd, buffer,
sizeof(buffer), 0);
127 std::stringstream ss;
128 ss <<
"Socket::Receive error, socket fd: " << m_SocketFd <<
" Error: " << WSAGetLastError();
130 SPICES_CORE_CRITICAL(ss.str())
133 return std::string(buffer, bytes);
140 if (::shutdown(m_SocketFd, SD_SEND) < 0)
142 std::stringstream ss;
143 ss <<
"Socket::ShutDownWrite error, socket fd: " << m_SocketFd <<
" Error: " << WSAGetLastError();
145 SPICES_CORE_CRITICAL(ss.str())
153 if (::setsockopt(m_SocketFd, IPPROTO_TCP, TCP_NODELAY,
reinterpret_cast<
const char*>(&on),
sizeof(
bool)) < 0)
155 std::stringstream ss;
156 ss <<
"Socket::SetTcpNoDelay error, socket fd: " << m_SocketFd <<
" Error: " << WSAGetLastError();
158 SPICES_CORE_CRITICAL(ss.str())
167
168
169
172 SPICES_CORE_ERROR(
"Windows not support SO_REUSEPORT, use SetReuseAddress instead.")
179 if (::setsockopt(m_SocketFd, SOL_SOCKET, SO_KEEPALIVE,
reinterpret_cast<
const char*>(&on),
sizeof(
bool)) < 0)
181 std::stringstream ss;
182 ss <<
"Socket::SetKeepAlive error, socket fd: " << m_SocketFd <<
" Error: " << WSAGetLastError();
184 SPICES_CORE_CRITICAL(ss.str())
192 if(::setsockopt(m_SocketFd, SOL_SOCKET, SO_REUSEADDR,
reinterpret_cast<
const char*>(&on),
sizeof(
bool)) < 0)
194 std::stringstream ss;
195 ss <<
"Socket::SetReuseAddress error, socket fd: " << m_SocketFd <<
" Error: " << WSAGetLastError();
197 SPICES_CORE_CRITICAL(ss.str())
#define SPICES_PROFILE_ZONE
This class is Wrapper of current socket address.
void SetReuseAddress(bool on) const
Set socket reuse address option.
void SetTcpNoDelay(bool on) const
Set socket Tcp no delay option.
void Connect(InetAddress *connectAddress) const
Connect to socket.
void Send(const std::string &data) const
Send data to server.
SOCKET Accept(InetAddress *peerAddress) const
Accept connection on socket.
void BindAddress(const InetAddress &localAddress) const
Bind address to socket.
void Create()
Create Non Blocking Socket.
virtual ~Socket()
Destructor Function.
std::string Receive() const
Receive data from server.
void SetKeepAlive(bool on) const
Set socket keep alive option.
void SetReusePort(bool on) const
Set socket reuse port option.
void ShutDownWrite() const
Disable writen in socket.
void Listen() const
Listen on socket.
This class is Wrapper of socket.