void __fastcall TListenThread::DoError()
{
if(m_Socket!=INVALID_SOCKET) closesocket(m_Socket);
WSACleanup();
return;
}
void __fastcall TListenThread::InitSocket()
{
WORD version=MAKEWORD(2,0);
if(::WSAStartup(version,&wsaData)){
sprintf(szTmp,"Failed to intiailize socket,error no:%d",::WSAGetLastError());
::MessageBox(0,szTmp,"Error",MB_OK+MB_ICONERROR);
DoError();
return;
}
}
void __fastcall TListenThread::CreateListenSocket()
{
switch(m_Protocol)
{
case UDP:
m_Socket=socket(AF_INET,SOCK_DGRAM,0);
break;
case TCP:
m_Socket=socket(AF_INET,SOCK_STREAM,0);
break;
default:
sprintf(szTmp,"Error protocol!");
::MessageBox(0,szTmp,"Error",MB_OK+MB_ICONERROR);
DoError();
break;
}
if(m_Socket==INVALID_SOCKET){
sprintf(szTmp,"Failed to create socket!");
::MessageBox(0,szTmp,"Error",MB_OK+MB_ICONERROR);
DoError();
return;
}
}
void __fastcall TListenThread::SetListenSocket()
{
server.sin_family=AF_INET;
server.sin_port=htons(m_Port);
server.sin_addr.S_un.S_addr=INADDR_ANY;
int NewOpenType=SO_SYNCHRONOUS_NONALERT;
if(setsockopt(INVALID_SOCKET,SOL_SOCKET,SO_OPENTYPE,(char*)&NewOpenType,4)){
sprintf(szTmp,"Set socket option error,error no:%d",::WSAGetLastError());
::MessageBox(0,szTmp,"Error",MB_OK+MB_ICONERROR);
DoError();
return;
}
}