利用http协议实现wget功能,采用简单的socket实现,在编写代码时
pthread_t download_thread;
pthread_create(&download_thread,NULL,download,(void *) &client_socket);
pthread_join(down_load_thread,NULL);
download()
{
...
while((len=lwip_read(client_slocket,buf,buf_len)) != 0 && length < resp.content_length)
...
}
显然在while的判断中有两个条件:
1.len != 0
2.length < resp.content_length
按照上述的顺序,在最后一次进入while时仍然会执行lwip_read(),而此时显然是无法再读到任何数据的,因为传输已经完成了。于是就出现了僵尸线程。
answer:
将while中的条件交换顺序即可
while(length < resp.content_length && (len=lwip_read(client_slocket,buf,buf_len)) != 0)
当涉及多个条件利用&& || 判断时,将最简单最容易得出结果的放在前面。