日期:2014-05-16  浏览次数:20537 次

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

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

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

------解决方案--------------------
貌似读写不冲突吧
你是两个进程,还是两个线程?
------解决方案--------------------
探讨

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