usleep(1000000);
write(clifd,s,strlen(s));//send(clifd,s,strlen(s),0);
}
return (void *)0;
}
哇!居然使用write的时候没有添加返回值的判断,在ubuntu终端中输入man 2 write,可以看到write出错时候会返回-1;
###2.简单完善代码容错机制
添加容错代码后以后看看效果如何,代码如下:
while(1)
{
usleep(1000000);
ret = write(clifd,s,strlen(s));//send(clifd,s,strlen(s),0);
if(ret == -1)
{
printf(“client thread write failed !\n”);
close(clifd);
pthread_exit(NULL);
}
}
执行结果如下:
过程分析,
1. 先执行服务端程序,然后运行客户端程序,客户端程序强制退出(通过快捷键ctrl+c),服务端client_thread中write返回-1,线程正常退出。
2. 这时候服务端程序还阻塞在accpet等待下一次的客户端连接请求,运行新的客户端程序,然后强制退出客户端,发现服务