This code is for a server. This question is about the code shown in red. I am wanting to add the ability to display stats in real-time when the 's' key is pressed. The code I added only seems to display at random intervals when the 's' key is pressed.
Am I using the _kbhit() function correctly? Can I use _kbhit() in this tight loop? Other ideas?
Code:
int main(int argc,char *argv[])
{
SOCKET s;
SOCKET ss;
struct hostent *hp;
struct sockaddr_in any_addr;
struct sockaddr_in remote_addr;
int addrlen;
THREADARGS ThreadArgs;
s = INVALID_SOCKET;
hp = NULL;
CLEAR_ADDR(&any_addr);
CLEAR_ADDR(&remote_addr);
addrlen = sizeof(struct sockaddr_in);
if(argc < 2)
{
printf("usage: %s port [-Ln]\n",argv[0]);
printf("-L: verbose level; 1, 2 or 3\n");
return 0;
}
ThreadArgs.VerboseLevel = 0;
while (argc--)
{
if (!strncmp(argv[argc], "-L", 2))
ThreadArgs.VerboseLevel = atoi(argv[argc]+2);
}
sockInit();
/* specifies host and port */
any_addr.sin_family = AF_INET;
//any_addr.sin_port=htons( (unsigned short) atoi(argv[1]));
any_addr.sin_port=htons(atoi(argv[1]));
/* accepts connections from any client */
any_addr.sin_addr.s_addr=htonl ( INADDR_ANY );
/* creates socket */
s = socket(AF_INET,SOCK_STREAM,0);
if (s == INVALID_SOCKET)
{
printf("Can't create socket\n");
sockEnd();
return 2;
}
/* links socket to address and port */
if(bind(s,(struct sockaddr *) &any_addr, sizeof(struct sockaddr_in)))
{
printf("Can't bind socket to address\n");
sockEnd();
return 3;
}
if ((fp = fopen("c:/winsock.txt", "w")) != NULL)
{
/* listens on port; maximum 5 requests pending */
listen(s, 5);
for( ; ; )
{
/* when someone connects, create a new socket for data exchange */
ss=accept(s, (struct sockaddr *) &remote_addr, &addrlen);
memcpy(&ThreadArgs.ss, &ss, sizeof(ss));
if (_beginthread(serverThread,0,(void *) &ThreadArgs) == -1)
{
perror("_beginthread failed");
break;
}
/* DEBUG MODE: show real-time stats when a key is pressed */
if(_kbhit())
{
switch (_getch())
{
case 's':
printf("Bytes Received: %ld\n",TotalBytesRecv);
break;
/* more options to follow */
}
}
}
fclose(fp);
} /* fopen() */
sockEnd();
return 0;
}
tia,
clu