我在lwip上创建一个应用程序,applcation只是将数据发送到服务器; 当我的应用程序工作了一段时间(大约5个小时)时,我发现发送线程挂在send()函数中,大约30分钟后send()返回0,我的线程运行agin; 在服务器端,有一个keepalive,它的时间是5分钟,当我的应用程序挂起时,5分钟后服务器关闭了sockect,但是我的app还没有得到这个,还挂在send()中直到30min得到0返回;为什么会这样? 1:上传速度不够发送数据,它会挂在发送? 2:也许服务器没有及时读取数据,它会使发送buff充满并挂起?
我如何在代码中避免这些问题?我试着设置TCP_NODELAY,SO_SNDTIMEO并在发送之前选择,但也有这个问题。
答案 0 :(得分:0)
send()
阻止。当对等体关闭连接时,recv()
返回零,这意味着您必须关闭套接字并停止读取。