首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

阻塞socket在多线程情况下的防护有关问题

2012-02-29 
求助:阻塞socket在多线程情况下的防护问题由于条件限制,必须用阻塞UDP socket,同时有跨平台的需求,所以不

求助:阻塞socket在多线程情况下的防护问题
由于条件限制,必须用阻塞UDP socket,同时有跨平台的需求,所以不考虑TCP,以及select和poll模型。
socket需要双向工作,每周期除了从多个外部节点接收数据,还要发送数据,所以放在同一个任务里肯定是不行的,必须要保证即使收不到数据,还要能发出数据。

因此我创建了两个任务:recvtask,sendtask,一个只负责收数据,一个负责发数据。
因为操作的是同一个socket,现在观察调试起来会出问题,经常判断sendto返回的长度>0,但下一句打印出来看却是-1,或者阻塞发送的时候出现HOSTDOWN的错误。总之表现不太正常。按理说阻塞模型下,如果底层协议栈暂时无法完成发送数据的请求,会一直在sendto阻塞,而不是出错吧?

请教各位高手,这种情况下需要对socket对象做多任务防护吗?如果做的话怎么实现呢(我分析这是矛盾的,即如果对recvfrom过程进行防护,则在recvfrom返回前,sendto操作是无法得到锁的)?

[解决办法]
貌似读写不冲突吧
你是两个进程,还是两个线程?
[解决办法]

探讨

貌似读写不冲突吧
你是两个进程,还是两个线程?

热点排行