上节在图片传输中,在主线程main中加入了epoll,结果和上上节的图片传输一结合,各种问题。
【问题】:将套接字设置成非阻塞,然后在epoll检测到sockfd有新数据时创建线程进行处理。然后问题来了,小图片第一次传输成功,第二次传输不成功;大图片一次传输都不成功;服务端图片size第一次打印正常 ,第二次打印乱码。
【解决步骤1】:于是将图片换成内容全是1和全是2的文本文件,来帮助检测。果然:第二次读size时,读的是缓冲区中文件2的内容2222222222
小文件由于size小于缓冲区size,所以一次读完了,传输正常。而大文件由于size大于缓冲区size,所以需要发送多次。
可为什么会每次都write done呢?我明明在servluo_match中read写了循环啊
打印了一下每次的bytes,发现只出现一次,然后定睛一看:bytes=-rd;代码错了,改成bytes-=rd;就正常了: