У меня есть простая программа, которая слушает сокет. Все идет хорошо, за исключением случаев, когда соединение теряется в цикле while(1)
. В этом случае программа попадает в считывание из сокета много раз без результата. Как я могу обнаружить отключенный клиент в цикле while(1)
?Обнаружен клиент отключен
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <stdio.h>
#include<string.h>
void printHex(char * bts )
{
char *s = bts;
int i=0;
do
{
printf("%02X ", (unsigned char ) *bts);
} while (* ++bts !=0);
printf("%s\n",s);
}
int main()
{
char str[100];
int listen_fd, comm_fd;
struct sockaddr_in servaddr;
listen_fd = socket(AF_INET, SOCK_STREAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htons(INADDR_ANY);
servaddr.sin_port = htons(22000);
printf("binding\n");
bind(listen_fd, (struct sockaddr *) &servaddr, sizeof(servaddr));
printf("listening\n");
listen(listen_fd, 10);
printf("accepting\n");
comm_fd = accept(listen_fd, (struct sockaddr*) NULL, NULL);
printf("accep done\n");
int cn =0;
while(1)
{
bzero(str, 100);
printf("will read\n");
int br= read(comm_fd,str,100);
printf("read done\n");
if (br>0)
{
printHex(str);
}
}
}