- 论坛徽章:
- 0
|
再接着来:
BaseSocket BaseSocket::accept()
{
struct sockaddr_in clientAddr;
[color=#FF9900>// memset(&clientAddr, 0x00, sizeof(clientAddr));
#ifdef _WIN32__
int len = sizeof(sockaddr_in);
#endif
#ifdef _LINUX__
socklen_t len = sizeof(sockaddr_in);
#endif
SOCKET sClient = ::accept(sock, (struct sockaddr*)& clientAddr, &len);
BaseSocket s(sClient);
s.addr = clientAddr;
if (!isValid())
{
#ifdef _WIN32__
printf("Accept Error ! : %d\n", GetLastError());
#endif
#ifdef _LINUX__
printf("Accept Error ! : %d, %s\n", errno, strerror(errno));
#endif
}
else
{
printf("accept client connection : %s -- %d\n", inet_ntoa(clientAddr.sin_addr), ntohs(clientAddr.sin_port));
}
return s;
}
//-------------------------------------------------------------------------
bool BaseSocket::connect(const char* ip, unsigned short port)
{
struct sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(port);
serverAddr.sin_addr.s_addr = inet_addr(ip);
if (-1 == ::connect(sock, (struct sockaddr*)& serverAddr, sizeof(struct sockaddr)))
{
#ifdef _WIN32__
printf("Socket Connect Error: %d\n", GetLastError());
#endif
#ifdef _LINUX__
printf("Socket Connect Error: %d, %S\n", errno, strerror(errno));
#endif
return false;
}
printf("socket %s:%d connect.\n", getIP(), getPort());
return true;
}
//-------------------------------------------------------------------------
bool BaseSocket::close()
{
printf("socket %s:%d close.\n", getIP(), getPort());
#ifdef _WIN32__
if (-1 == ::closesocket(sock))
{
printf("socket close error!\n", GetLastError());
return false;
}
#endif
#ifdef _LINUX__
if (-1 == ::close(sock))
{
printf("socket close error! %d, %s\n", errno, strerror(errno));
return false;
}
#endif
return true;
}
//-------------------------------------------------------------------------
bool BaseSocket::bind(unsigned short port)
{
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
addr.sin_addr.s_addr = htonl(INADDR_ANY);
memset(&addr.sin_zero, 0x00, sizeof(addr.sin_zero));
if (-1 == ::bind(sock, (struct sockaddr*)& addr, sizeof(struct sockaddr)))
{
#ifdef _WIN32__
printf("socket bind error! %d\n", GetLastError());
#endif
#ifdef _LINUX__
printf("socket bind error! %d: %s\n", errno, strerror(errno));
#endif
return false;
}
return true;
}
//-------------------------------------------------------------------------
bool BaseSocket::listen(int num)
{
if (-1 == ::listen(sock, num))
{
#ifdef _WIN32__
printf("listen error! %d\n", GetLastError());
#endif
#ifdef _LINUX__
printf("listen error! %d: %s", errno, strerror(errno));
#endif
return false;
}
return true;
}
//-------------------------------------------------------------------------
bool BaseSocket::isValid()
{
return -1 != sock;
}
//-------------------------------------------------------------------------
unsigned short BaseSocket::getPort() const
{
return (unsigned short) (::ntohs(addr.sin_port));
} |
|
|