Code:
BOOL CALLBACK DlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
HWND display = GetDlgItem(hwnd,IDL_DISPLAY);
int n = 0;
switch(Message)
{
case WM_INITDIALOG:
{
WSADATA w;
if(WSAStartup(0x0202,&w))
SendMessage(display,LB_ADDSTRING,n,(LPARAM)"-- Error in initializing WinSock.");
else
SendMessage(display,LB_ADDSTRING,n,(LPARAM)"-- Winsock initialized successfully.");
n++;
if(w.wVersion != 0x0202)
{
SendMessage(display,LB_ADDSTRING,n,(LPARAM)"-- Wrong version of Winsock.");
WSACleanup();
}
else
SendMessage(display,LB_ADDSTRING,n,(LPARAM)"-- Right version of Winsock (2.2)");
n++;
}
break;
case WM_CREATE:
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_LISTEN:
{
SOCKET listener;
UINT listenport;
listenport = GetDlgItemInt(hwnd,IDC_SERVERPORT,NULL,false);
listener = socket(AF_INET,SOCK_STREAM,0);
if(listener == INVALID_SOCKET)
{
SendMessage(display,LB_ADDSTRING,n,(LPARAM)"-- Listening socket error.");
WSACleanup();
}
else
SendMessage(display,LB_ADDSTRING,n,(LPARAM)"-- Listening socket created successfully");
n++;
sockaddr_in serveraddr;
serveraddr.sin_family = AF_INET;
serveraddr.sin_port = htons(listenport);
serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind(listener,(LPSOCKADDR)&serveraddr,sizeof(serveraddr)) == SOCKET_ERROR)
{
SendMessage(display,LB_ADDSTRING,n,(LPARAM)"-- Error binding listening port.");
WSACleanup();
}
if(listen(listener,1) == SOCKET_ERROR)
{
SendMessage(display,LB_ADDSTRING,n,(LPARAM)"-- Error listening.");
closesocket(listener);
WSACleanup();
}
else
{
SOCKET client;
client = accept(listener,NULL,NULL);
if(client == INVALID_SOCKET)
{
SendMessage(display,LB_ADDSTRING,n,(LPARAM)"-- Cannont accept connection.");
closesocket(listener);
WSACleanup();
}
else
{
char *buffer;
while(buffer != "---")
{
buffer = "---";
recv(client,buffer,sizeof(buffer),0);
if(buffer != "---")
{
if(strlen(buffer) > 0)
{
SendMessage(display,LB_ADDSTRING,n,(LPARAM)buffer);
n++;
}
else
{
closesocket(listener);
SendMessage(display,LB_ADDSTRING,n,(LPARAM)"-- Connection closed");
WSACleanup();
}
}
}
}
}
}
break;
}
break;
case WM_CLOSE:
EndDialog(hwnd,0);
break;
case WM_DESTROY:
break;
default:
return FALSE;
}
return TRUE;
}
When I run the program and click listen it freezes. I think I have the problem singled out to the "accept". If I take out all the code from accept and below, it works fine. If I just leave the accept and take out the socket code below it, it freezes. What could be the problem?