📄 listenserver.cpp
字号:
#include "StdInc.h"
CListenServer::CListenServer()
{
m_bConnect = FALSE;
}
CListenServer::~CListenServer()
{
}
void CListenServer::ReportWSAErr()
{
char bufLog[30];
switch(WSAGetLastError())
{
case WSANOTINITIALISED: strcpy(bufLog, "WSANOTINITIALISED"); break;
case WSAENETDOWN: strcpy(bufLog, "WSAENETDOWN"); break;
case WSAEADDRINUSE: strcpy(bufLog, "WSAEADDRINUSE"); break;
case WSAEADDRNOTAVAIL: strcpy(bufLog, "WSAEADDRNOTAVAIL"); break;
case WSAEFAULT: strcpy(bufLog, "WSAEFAULT"); break;
case WSAEINPROGRESS: strcpy(bufLog, "WSAEINPROGRESS"); break;
case WSAEINVAL: strcpy(bufLog, "WSAEINVAL"); break;
case WSAEISCONN: strcpy(bufLog, "WSAEISCONN"); break;
case WSAEMFILE: strcpy(bufLog, "WSAEMFILE"); break;
case WSAENOBUFS: strcpy(bufLog, "WSAENOBUFS"); break;
case WSAENOTSOCK: strcpy(bufLog, "WSAENOTSOCK"); break;
case WSAEOPNOTSUPP: strcpy(bufLog, "WSAEOPNOTSUPP"); break;
default : return;
}
printf ("%s\n", bufLog) ;
}
void CListenServer::SetNetEvent()
{
m_wsaEvent = WSACreateEvent();
WSAEventSelect(m_sSocket, m_wsaEvent, FD_ACCEPT);
}
BOOL CListenServer::Init()
{
WSADATA wdata;
if (WSAStartup(MAKEWORD(2,2), &wdata) == SOCKET_ERROR)
{
// err msg
goto Err00;
}
if ((m_sSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET)
{
// err msg
goto Err01;
}
SOCKADDR_IN sinSvrSock;
sinSvrSock.sin_family = AF_INET;
sinSvrSock.sin_addr.s_addr = htonl(INADDR_ANY);
// sinSvrSock.sin_addr.s_addr = inet_addr(g_szThisServerIP);
sinSvrSock.sin_port = htons(g_nThisServerPort);
if (bind(m_sSocket, (SOCKADDR *)&sinSvrSock, sizeof(sinSvrSock)) == SOCKET_ERROR)
{
// err msg
goto Err02;
}
if (listen(m_sSocket, 5) == SOCKET_ERROR)
{
// err msg
goto Err02;
}
if (BeginThread() == FALSE)
{
// err msg
goto Err02;
}
return TRUE;
Err02:
ReportWSAErr();
Err01:
closesocket(m_sSocket);
Err00:
WSACleanup();
return FALSE;
}
void CListenServer::LoopProc()
{
SetNetEvent();
CLoopThread::LoopProc();
WSACloseEvent(m_wsaEvent);
}
void CListenServer::Process()
{
int ClientLen;
SOCKADDR_IN ClinetAddr;
SOCKET ClientSock;
if (WSAWaitForMultipleEvents(1, &m_wsaEvent, FALSE, 0, TRUE) == WSA_WAIT_EVENT_0)
{
WSAEnumNetworkEvents(m_sSocket, m_wsaEvent, &m_netEvent);
if (m_netEvent.lNetworkEvents & FD_ACCEPT)
{
ClientLen = sizeof(ClinetAddr);
if ((ClientSock = accept(m_sSocket, (SOCKADDR *)&ClinetAddr, &ClientLen)) != INVALID_SOCKET)
{
// S2M_SVR_LOGIN 阑 措扁窍绰 辑滚俊 眠啊
if (GateManage.NewStandbyServer(ClientSock) == FALSE)
{
closesocket(ClientSock);
}
}
}
}
}
void CListenServer::OnClose()
{
CLoopThread::CloseThread();
closesocket(m_sSocket);
WSACleanup();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -