42 lines
1.2 KiB
C++
42 lines
1.2 KiB
C++
#include "socket/tcp_socket.h"
|
|
|
|
namespace Network {
|
|
|
|
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(std::shared_ptr<TCPSocket> &newSock,
|
|
Address &__addr) {
|
|
SOCKET newsock = INVALID_SOCKET;
|
|
newsock = ::accept(sock, &__addr.addr, &__addr.length);
|
|
if (newsock == INVALID_SOCKET) {
|
|
spdlog::error("accept() errno:{} {}", errno, strerror(errno));
|
|
std::exit(EXIT_FAILURE);
|
|
}
|
|
newSock = std::make_shared<TCPSocket>();
|
|
newSock->set(newsock, domain);
|
|
newSock->remoteAddr = __addr;
|
|
}
|
|
|
|
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 Network
|