#include "socket/tcp_socket.h" namespace Socket { int TCPSocket::init(int domain) { return init(domain, SOCK_STREAM, 0); } int TCPSocket::listen(int __n) { int retVal = ::listen(sock, __n); if (retVal == INVALID_SOCKET) spdlog::error("listen()"); return retVal; } void TCPSocket::accept(TCPSocket &newSock, Address &__addr) { newSock.set(::accept(sock, &__addr.addr, &__addr.length), domain); memcpy(&newSock.remoteAddr, &__addr, sizeof(Address)); if (newSock.sock == INVALID_SOCKET) spdlog::error("accept()"); } int TCPSocket::connect(Address &serveraddr) { int retVal = ::connect(sock, (struct sockaddr *)&serveraddr.addr, serveraddr.length); memcpy(&remoteAddr, &serveraddr, sizeof(Address)); if (retVal == INVALID_SOCKET) spdlog::error("connect()"); return retVal; } int TCPSocket::recv(void *__restrict __buf, size_t __n, int __flags) { int retVal = ::recv(sock, (char *)__buf, __n, __flags); if (retVal == SOCKET_ERROR) { if (errno == EAGAIN || errno == EWOULDBLOCK) return retVal; spdlog::error("recv()"); } return retVal; } int TCPSocket::send(const void *__buf, size_t __n, int __flags) { int retVal = ::send(sock, (char *)__buf, __n, __flags); if (retVal == SOCKET_ERROR) spdlog::error("send()"); return retVal; } } // namespace Socket