当前位置: 技术问答>linux和unix
嵌入式Linux Socket错乱问题
来源: 互联网 发布时间:2017-05-28
本文导语: 描述: 服务器是:ARM9+linux2.6.1 客户端是:Windows PC 问题: 服务器做了最多PC 1个client可以连接的限制,具体做法是看连接数, 第二个的话三次握手连接成功但立刻close第二个client. 某些未知情况下出...
描述:
服务器是:ARM9+linux2.6.1
客户端是:Windows PC
问题:
服务器做了最多PC 1个client可以连接的限制,具体做法是看连接数,
第二个的话三次握手连接成功但立刻close第二个client.
某些未知情况下出现如下,pc 第一个socket连接上服务器后,服务器可以收该client的数据但服务器有数据却发送不了给client,阻塞住了。
此时需要靠再打开第二个client去连接服务器,服务器才能对刚才第一个socket 的client端发送数据阻塞住的数据(测试时,阻塞10s-100s都可以)
提问:
什么情况会导致这个服务器,有数据阻塞住了发不出,得靠另外一个client再去连接它了,才能恢复第一个的通信
服务器是:ARM9+linux2.6.1
客户端是:Windows PC
问题:
服务器做了最多PC 1个client可以连接的限制,具体做法是看连接数,
第二个的话三次握手连接成功但立刻close第二个client.
某些未知情况下出现如下,pc 第一个socket连接上服务器后,服务器可以收该client的数据但服务器有数据却发送不了给client,阻塞住了。
此时需要靠再打开第二个client去连接服务器,服务器才能对刚才第一个socket 的client端发送数据阻塞住的数据(测试时,阻塞10s-100s都可以)
提问:
什么情况会导致这个服务器,有数据阻塞住了发不出,得靠另外一个client再去连接它了,才能恢复第一个的通信
|
如果要成你这样需求的,并不需要这么复杂,将服务器端做成非异步的,上一个连接处理不完,就不会处理下一个请求
你这个问题就跟踪一下看在哪个函数阻塞住了,再分析原因
对于发第二个能让第一个恢复,有个思路就是 “信号会打断阻塞的系统调用”,你再分析一下
你这个问题就跟踪一下看在哪个函数阻塞住了,再分析原因
对于发第二个能让第一个恢复,有个思路就是 “信号会打断阻塞的系统调用”,你再分析一下
|
采用多线程,起一个线程专门发送。如果要收到数据来判断发送内容的话,就用信号量。