writev发送数据失败
最近项目上遇到一个问题,curl请求服务器阻塞了。
我初步怀疑是服务器没有下发数据,通过GDB调试,发现调试到writev函数时就是跳过,怀疑是writev函数出现问题。
1.我检查了一下自己的套接字是否已经被破坏,经过判断没有;
2.怀疑数据在TCP缓冲区里,特地设置TCP_NODELAY,没有产生效果;
3.抓包分析报文数据,看看能否找到有用信息,结果发现实际上服务器数据早就发送了,是客户端阻塞了
结论:HTTP请求有报文体时,必须设置Content-Length,否则客户端会一直阻塞。
备注:writev函数在GDB调试时略过时正常现象。