SAL中TCP发送函数send的疑问

发布于 2019-05-28 15:11:34    浏览:676
我有看到SAL层中实现send的函数如下:
int send(int s, const void *dataptr, size_t size, int flags)
{
int socket = dfs_net_getsocket(s);

return sal_sendto(socket, dataptr, size, flags, NULL, 0);
}
RTM_EXPORT(send);

调用的是sal_sendto接口,请问一下为啥没有面向连接的send接口。

查看更多

3 个回答
libing
libing 2019-05-28
This guy hasn't written anything yet
我想通过send的返回值来判断对方是否断开连接,在实际测试发现,即使对方断开连接,send的返回值也正常;网上说send是带缓冲区的,所以这样应该不行,请问一下有什么好的方法来判断对方是否断开连接没有
Cheney_Chen
Cheney_Chen 2019-05-28
This guy hasn't written anything yet
    本帖最后由 Cheney_Chen 于 2019-5-28 22:32 编辑


这里的断开连接其实可以分为两种吧,一种是关闭连接可以正常发送 FIN 消息,另一种就是设备重启来不及发送 FIN 消息。

对于第一种正常断开后,对应连接方 send 、recv 这种函数应该会正常返回 0,表示对方连接已经断开;

对于设备重启等断开方式,我想楼主应该说的是这种方式的检测,这种方式设备不会发送 FIN 消息通知对等方连接断开,这时候对等方 send 等函数应该还会继续发送数据。这种断开方式不容易被实时检测,如果想要检测这种断开,最好的方式应该是设置keepalive心跳时间。
libing
libing 2019-05-28
This guy hasn't written anything yet
Cheney_Chen 发表于 2019-5-28 17:47
这里的断开连接其实可以分为两种吧,一种是关闭连接可以正常发送 FIN 消息,另一种就是设备重启来不及发送 ...


谢谢解答

撰写答案

请登录后再发布答案,点击登录
关注者
0
被浏览
676

发布
问题

分享
好友

手机
浏览

扫码手机浏览