找回密码
 注册
搜索
查看: 1305|回复: 8

[讨论] MTK socket 疑难杂症

[复制链接]
发表于 2009-7-1 20:11:21 | 显示全部楼层 |阅读模式
使用MTK SOCKET过程中遇到一棘手问题,具体如下:
当使用SOCKET发送大量数据的时候,很容易发生阻塞现象,即调用soc_send返回SOC_WOULDBLOCK,此时已不能再发送数据,直到注册的回调函数收到SOC_WRITE。
要命的是,在这段过程中,SOC_READ也不会响应,如此一来就会send也阻塞,read也阻塞,通讯瘫痪。
想了两个办法来解决:
1. 使用 soc_setsockopt 中的SOC_SENDBUF,加大发送缓存,降低阻塞几率。
2. 使用 soc_getsockopt ,取sendbuf里的已有数据长度,当该长度达到6K时,停止往sendbuf里扔数据,防止阻塞。

方法一没效果,查看源码,好像soc_setsockopt里没实现SOC_SENDBUF。
方法二,soc_getsockopt没找到合适参数。

请教高人,我是否有使用不正确的地方?或者有其他的解决方法。

我想啊,MMS中发送大数据(有时能达到几个M)是怎么弄的呢?

欢迎大家讨论。

谢谢!
发表于 2009-7-3 14:18:32 | 显示全部楼层
没发过太大的数据,不知道你发给的是服务器还是其他设备。如果发给服务器,是否可以考虑让服务器每接收到一包数据时返回给终端一两个字节,以便继续发送。
或者准备一个发送池,有n个task一起发送,不过需要接受端对接受到的包进行重组。 不知道是否可行,没试过。
点评回复

使用道具 举报

发表于 2009-7-3 16:41:44 | 显示全部楼层
那你为什么不等到回调函数收到SOC_WRITE再继续发送或读取呢?
点评回复

使用道具 举报

 楼主| 发表于 2009-7-9 12:46:30 | 显示全部楼层
以下是引用tenminutes在2009-7-3 16:41:44的发言:
那你为什么不等到回调函数收到SOC_WRITE再继续发送或读取呢?


我现在的做法就是这样。

可是这段时间长的会达到10秒以上,而且会很频繁,不能满足业务需要。
点评回复

使用道具 举报

 楼主| 发表于 2009-7-9 12:50:08 | 显示全部楼层
以下是引用hillsshh在2009-7-3 14:18:32的发言:
没发过太大的数据,不知道你发给的是服务器还是其他设备。如果发给服务器,是否可以考虑让服务器每接收到一包数据时返回给终端一两个字节,以便继续发送。
或者准备一个发送池,有n个task一起发送,不过需要接受端对接受到的包进行重组。 不知道是否可行,没试过。


是发送给服务器。

多task发送倒是没试过,不过数据的分解和重组相当的复杂啊。
点评回复

使用道具 举报

发表于 2009-7-21 15:10:45 | 显示全部楼层
恩,很有意义一个问题

我也没有类似经历,无法帮你
点评回复

使用道具 举报

发表于 2009-7-27 15:22:26 | 显示全部楼层
正在学习
点评回复

使用道具 举报

发表于 2009-8-8 18:05:39 | 显示全部楼层
[em01]
点评回复

使用道具 举报

发表于 2009-8-14 14:58:37 | 显示全部楼层
学习学习[em01]
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-12-30 03:57 , Processed in 0.050030 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表