Files
NP_Midterm/impl/Socket/TCPSocket.cpp
2025-05-09 21:47:00 +09:00

51 lines
1.4 KiB
C++

#include "Socket/TCPSocket.hpp"
#include "Socket/Log.hpp"
#include "precomp.hpp"
namespace Chattr {
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)
log::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(Chattr::Address));
if (newSock.sock == INVALID_SOCKET)
log::error("accept()");
}
int TCPSocket::connect(Address& serveraddr) {
int retVal = ::connect(sock, (struct sockaddr *)&serveraddr.addr, serveraddr.length);
memcpy(&remoteAddr, &serveraddr, sizeof(Chattr::Address));
if (retVal == INVALID_SOCKET)
log::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;
log::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)
log::error("send()");
return retVal;
}
}