lwip - tcp socket在send()中阻塞的原因是什么?

时间:2014-03-04 09:14:26

标签: sockets networking tcp nonblocking

我在lwip上创建一个应用程序,applcation只是将数据发送到服务器; 当我的应用程序工作了一段时间(大约5个小时)时,我发现发送线程挂在send()函数中,大约30分钟后send()返回0,我的线程运行agin; 在服务器端,有一个keepalive,它的时间是5分钟,当我的应用程序挂起时,5分钟后服务器关闭了sockect,但是我的app还没有得到这个,还挂在send()中直到30min得到0返回;为什么会这样? 1:上传速度不够发送数据,它会挂在发送? 2:也许服务器没有及时读取数据,它会使发送buff充满并挂起?

我如何在代码中避免这些问题?我试着设置TCP_NODELAY,SO_SNDTIMEO并在发送之前选择,但也有这个问题。

1 个答案:

答案 0 :(得分:0)

当接收者离发送者太远时,

send()阻止。当对等体关闭连接时,recv()返回零,这意味着您必须关闭套接字并停止读取。