当前位置: 技术问答>linux和unix
socket还是不太明白
来源: 互联网 发布时间:2016-09-14
本文导语: 我写了一个客户端程序,是在动态库里实现的,但是当我循环发送时,发现只有前几个send数据有应答数据返回,剩下的全部发送请求都是应答超时了,但是当我把send的间隔时间变的足够长之后,所有的请求就都有应...
我写了一个客户端程序,是在动态库里实现的,但是当我循环发送时,发现只有前几个send数据有应答数据返回,剩下的全部发送请求都是应答超时了,但是当我把send的间隔时间变的足够长之后,所有的请求就都有应答了。这是什么原因呢??
简单描述一下我的客户端的实现,在动态库(UNIX下是共享库)的输出函数里负责发送请求数据,由于输出函数可以循环调用,因此send也可以循环调用,动态库被加载时建立N个socket连接,在库里启动一个线程负责接收应答数据,通过一个全局变量保存应答数据,在输出函数里通过扫描全局变量来确定应答数据的返回,如果在一段时间内找不到请求包对应的应答包被放在全局变量中,则认为请求超时,有一个线程负责清理超时被放在全局变量中的应答包。
简单描述一下我的客户端的实现,在动态库(UNIX下是共享库)的输出函数里负责发送请求数据,由于输出函数可以循环调用,因此send也可以循环调用,动态库被加载时建立N个socket连接,在库里启动一个线程负责接收应答数据,通过一个全局变量保存应答数据,在输出函数里通过扫描全局变量来确定应答数据的返回,如果在一段时间内找不到请求包对应的应答包被放在全局变量中,则认为请求超时,有一个线程负责清理超时被放在全局变量中的应答包。
|
你用的是TCP还是UDP?
|
能把循环发送部分的代码贴上来吗?
根据目前的描述有可能是建立的socket连接太多,造成系统一直在做建立socket的工作,而造成接收部分超时
根据目前的描述有可能是建立的socket连接太多,造成系统一直在做建立socket的工作,而造成接收部分超时
|
考虑下send的发送缓冲区大小
好像楼主是在测试服务器的负载连接是吗?
客户端发了很多,服务器端响应的时候是向同一个IP的客户端回应众多的回应,客户端怎么处理这众多的回应,一个线程能否解决这么多的回应我不知道,一个接受缓冲区又能接受多少数据,还要看你的客户端代码怎么实现的,
|
服务端方面是否出现了异常呢?