当前位置:  技术问答>linux和unix

socket通信时,select一直返回超时的问题

    来源: 互联网  发布时间:2016-02-24

    本文导语:  在使用socket进行udp时,出现这么一个问题: 如果先建立发送端,再建立接收端,正常。 如果先建立接收端,再建立发送端,则出现异常,接收端的select函数一直返回0,即超时了。 发送端一切正常,在Window下运行的其它监...


在使用socket进行udp时,出现这么一个问题:
如果先建立发送端,再建立接收端,正常。
如果先建立接收端,再建立发送端,则出现异常,接收端的select函数一直返回0,即超时了。
发送端一切正常,在Window下运行的其它监视程序,可正常接收到发送端发送的数据。

烦请大家帮忙分析一下,谢谢!

接收端的相应代码如下:

//socket 接收线程
//创建的socket通过参数args传递
static void* SocketRecvHandle(void* args)
{
SOCKET_RECV_S *pSocket = NULL;
unsigned char RecvBuff[RPT_MAX_PACKET_BUFF];
struct sockaddr from;
struct timeval tv;
unsigned int from_len = 0;

unsigned int nRet = 0;
unsigned int nByteRecv = 0;

fd_set readfds;


if (NULL == args)
{
printf("Socket recv thread create error. pass null para.n"); 
return NULL;
}

pSocket  = (SOCKET_RECV_S*) args;
from_len = sizeof(struct sockaddr);

if (pSocket->socket == 0)
{
printf("Socket recv thread create error. no active socket.n"); 
return NULL;
}

pSocket->runState = RTP_RUNSTATE_RUNNING ;

while (pSocket->runState == RTP_RUNSTATE_RUNNING)
{
tv.tv_sec = 0;
tv.tv_usec = 50000;

memset(RecvBuff, 0, RPT_MAX_PACKET_BUFF);        

FD_ZERO(&readfds);
FD_SET(pSocket->socket, &readfds);

nRet = select(pSocket->socket + 1, &readfds, NULL, NULL, &tv);

if (nRet == -1)
{
printf("Socket recv select error. %s", strerror(errno));
}
else if (nRet == 0)
{
printf("Socket recv select timeout. %s", strerror(errno));
}
else
{
if (FD_ISSET(pSocket->socket, &readfds))
{
//socket 接收到数据
//……
}
else
{
printf("Socket unknown error. ");
}
}
}
return NULL;
}

|
May be the follow can be deal with your probelem. But i am not sure.
just try it:)

befor:
else 

if   (FD_ISSET(pSocket-> socket,   &readfds)) 

//socket   接收到数据 
//……



after:
else   if   ( (ret > 0) && (FD_ISSET(pSocket-> socket,   &readfds)) )

if   (FD_ISSET(pSocket-> socket,   &readfds)) 

//socket   接收到数据 
//……

|
"如果先建立接收端,再建立发送端,则出现异常,接收端的select函数一直返回0,即超时了。"
在这种建立的循序下,接收端很有可能会发生超时的。因为楼主设的超时时间是50毫秒。我不知道搂住所谓的在Window下运行的其它监视程序的超时时间是多长?也是50毫秒吗? 


|
接收超时时间设置的太小

    
 
 

您可能感兴趣的文章:

  • epoll,socket超时如何设置?
  • 求教一个socket超时的问题
  • 关于Socket编程:如何设置超时?
  • 关于Socket中connect连接host的超时问题,急!!!
  • 如何设置linux下socket的2MS超时(会者不难的简单问题)????
  • 求linux下 设置socket接收超时的方法
  • socket的select使用超时的问题
  • Linux下Socket接收超时和主机端口 如何区分
  • C# Socket连接请求超时机制实现代码分享
  • 求助socket超时控制编程的问题(java)!!!!急急!!!!
  • 如何设置Socket链接超时,在线等,一定给分!
  • python socket 超时设置 errno 10054
  • socket 连接超时的问题
  • re socket编程中 ACCEPT返回的socket与原socket(他参数中的)端口号一样吗?
  • socket的close是立刻返回,还是等四路握手过程完成再返回
  • java 中 SOCKET 的ACCEPT函数有返回值吗?怎样返回才是正常的?
  • 当close(socket)时,为什么linux下slect不返回而windows下就返回??????????
  • socket read返回问题
  • PF_PACKET,socket返回-1
  • 请问:SCO UNIX下SOCKET的recv返回-1,errno=9?在线等·····
  • (socket通信)poll提示有数据可读 recv却返回 EAGAIN
  • socket send的返回值
  • select+read 读服务器发送过来的数据, 假设服务器调用close后, 客户端的select是否返回这个socket可读?
  • 请教: read一个socket, read返回需要多长时间?
  • socket创建失败,返回系统错误码84,invalid or incomplete multibyte or wide character
  • linux和unix iis7站长之家
  • socket连接函数connect()返回错误 errno 为 115,什么原因?谢谢
  • 求助UDP socket sendto返回EHOSTDOWN的问题
  • err=sock->ops->setsockopt(sock, SOL_SOCKET, ...);返回值代表的含义?
  • linux c socket http编程 返回http消息体出错!
  • socket编程accept返回值为0,是否正常?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • php实现socket实现客户端和服务端数据通信源代码
  • 请问unix与window之间能否实现socket通信或者有什么方式可以通信?
  • SSL握手通信详解及linux下c/c++ SSL Socket代码举例
  • 两个 Socket 互相通信,其中一个如何判断另一个 Socket 是否已经意外断开了连接?
  • linux下用socket实现多进程间通信问题?
  • 怎样提高j2me中socket通信速度???
  • FIFO和Socket通信的并发效率问题
  • socket 通信!
  • 关于多网口socket通信的简单问题
  • socket通信
  • linux客户端程序能否和windows端的服务器程序进行socket通信?
  • Windows VMWare虚拟机socket通信问题
  • 征求Socket通信例程代码
  • Linux下的Socket通信如何断开连接的端口从而实现重复使用该端口
  • 初学内核编程,在内核态下怎么用socket通信?
  • linux与Windows socket通信,乱码
  • 基于socket的linux和Windows通信程序为什么运行特别慢?
  • C和Java的Socket通信问题
  • 关于socket通信问题
  • 关于socket通信,C的代码,有个问题请教高手!
  • socket通信 请求应答
  • java命名空间java.net类socket的类成员方法: socket定义及介绍
  • libevent2需要从socket读一段数据写入一个socket中,同时发送给另一个socket
  • java命名空间java.nio.channels类socketchannel的类成员方法: socket定义及介绍
  • socket 通讯开发包 Simple Sockets
  • java命名空间java.nio.channels类serversocketchannel的类成员方法: socket定义及介绍
  • C++ Socket 库 C++ Sockets
  • java命名空间java.nio.channels类datagramchannel的类成员方法: socket定义及介绍
  • vc做的的socket应用和unix下socket?
  • java命名空间java.net类socket的类成员方法: getsendbuffersize定义及介绍
  • QSocketDevice ( int socket, Type type )中那个 int socket 是哪里来得?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3