Hello.
I created a telnet server based on this code from
[c/c++] How To Code A Multi-client Server In C\++ Using Threads - Tutorials - rohitab.com - Forums[
^]
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <winsock.h>
#include "mingw.thread.h"
DWORD WINAPI receive_cmds(LPVOID lpParam)
{
printf("thread created\r\n");
SOCKET current_client = (SOCKET)lpParam;
char buf[100];
char sendData[100];
int res;
while(true)
{
res = recv(current_client,buf,sizeof(buf),0);
Sleep(10);
if(res == 0)
{
MessageBox(0,"error","error",MB_OK);
closesocket(current_client);
ExitThread(0);
}
if(strstr(buf,"hello"))
{ printf("\nrecived hello cmd");
strcpy(sendData,"hello, greetz from KOrUPt\n");
Sleep(10);
send(current_client,sendData,sizeof(sendData),0);
}
else if(strstr(buf,"bye"))
{ printf("\nrecived bye cmd\n");
strcpy(sendData,"cya\n");
Sleep(10);
send(current_client,sendData,sizeof(sendData),0);
closesocket(current_client);
ExitThread(0);
}
else
{
strcpy(sendData,"Invalid cmd\n");
Sleep(10);
send(current_client,sendData,sizeof(sendData),0);
}
strcpy(sendData,"");
strcpy(buf,"");
}
}
int main()
{
printf("Starting up multi-threaded TCP server by KOrUPt\r\n");
SOCKET sock;
DWORD thread;
WSADATA wsaData;
sockaddr_in server;
int ret = WSAStartup(0x101,&wsaData);
if(ret != 0)
{
return 0;
}
server.sin_family=AF_INET;
server.sin_addr.s_addr=INADDR_ANY;
server.sin_port=htons(123);
sock=socket(AF_INET,SOCK_STREAM,0);
if(sock == INVALID_SOCKET)
{
return 0;
}
if( bind(sock,(sockaddr*)&server,sizeof(server)) !=0 )
{
return 0;
}
if(listen(sock,5) != 0)
{
return 0;
}
SOCKET client;
sockaddr_in from;
int fromlen = sizeof(from);
while ((client = accept(sock, (struct sockaddr*)&from,&fromlen))!= INVALID_SOCKET)
{
client = accept(sock,(struct sockaddr*)&from,&fromlen);
printf("Client connected\r\n");
std::thread th_client(receive_cmds,(LPVOID)client);
}
closesocket(sock);
WSACleanup();
return 0;
}
What I have tried:
CPU usage increasing over time.
Not from memory leak.
Please help me