C语言]socket send成功返回但是对面未能成功收到。
我是看的一Unix下开源产品源代码,服务器客户端模型,C语言编写。
问题是这样的,服务端在处理完请求后返回一个确认字串给客户端(几个字节),而客户端读取服务端的返回失败,检测到根本就没有读到内容,从而引发了一些其它的问题。
通过检查服务端,我发现返回的地方就是一个简单的send函数,而且通过检查发现返回值正常。
我知道send只是将内容copy到socket对应的缓冲区,只要copy成功就返回成功。所以问题应该在后面,不过现在暂时不知道如何去侦测。
在别的论坛上又有人建议我抓包,最后抓过来分析了。
用tcpdump抓包,与服务器和客户端的调试数据做对比,情况如下。
出错是在第446284(此数不一定,每次情况不同)次操作,从抓到的包来看,只看到这一条的客户端请求,并没有发现有服务器返回的包。
所以判断应该是服务器端返回没有成功,也就是上面说的,它只是将返回内容copy到了socket的缓冲区,但是最终的发送失败了。
然而服务器的错误追踪到send之后,也就是说send成功后内核在输出socket缓冲区的时候出错了。这个东西。。。。。有点不知道如何是好了。
请大家指教。。