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

udp socket recvfrom偶尔会返回-1,perror打印出的提示是"recvfrom: Resource temporarily unavailable"

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

    本文导语:  我在用socket接收udp数据包时,select函数却返回正确的情况下recvfrom偶尔会返回-1,perror打印出的提示是"recvfrom: Resource temporarily unavailable",然后重新循环接收,执行recvfrom又返回正确了,代码如下,不知道是什么原因?大家帮我...

我在用socket接收udp数据包时,select函数却返回正确的情况下recvfrom偶尔会返回-1,perror打印出的提示是"recvfrom: Resource temporarily unavailable",然后重新循环接收,执行recvfrom又返回正确了,代码如下,不知道是什么原因?大家帮我找找原因.
.....
  struct timeval timeout;
  fd_set fdread;
  int ret;

for (;;)
{
timeout.tv_sec=1;
timeout.tv_usec=0;
FD_ZERO(&fdread); 

                pthread_mutex_lock(&mutex_recvsock);
FD_SET(recv_sock, &fdread); 
           ret = select(recv_sock+1, &fdread, NULL,NULL, &timeout);
if(ret == -1){
    pthread_mutex_unlock(&mutex_recvsock);
    old_switch_addr = 0;//source_addr;
           perror("recv_data select1");
    continue; 
  }
else if(ret == 0){
    pthread_mutex_unlock(&mutex_recvsock);
    printf("select timeoutn");
         perror("recv_data select2");
    continue; 
  }
  else if (FD_ISSET(recv_sock,&fdread)) {
        nsize = recvfrom(recv_sock,buf, sizeof(buf), 0, (struct sockaddr *)&source2, &sin_len);
 if(nsize == -1){
     printf("recv_data recvfrom errorn");
     perror("recv_data recvfrom");
pthread_mutex_unlock(&mutex_recvsock);
continue;
       }
 }
           else{
pthread_mutex_unlock(&mutex_recvsock);
     perror("recv_data select3");
        continue; 
      }
.......



|
很正常, UDP, 就这样.

|
应该是线程同步的原因吧,可能是多个线程同时读数据了.

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Qt:UDP:如何划分接收到的UDP包的界限
  • udp包大于1500字节网络传输会分包吗?udp tcp多大的包比较合适?
  • http走的是tcp还是udp?ssh是tcp还是udp?
  • tcp和udp套接字有何不同?在什么情况下用tcp什么情况下用udp????
  • 50求教一个菜鸟级别的UDP套接字问题,关于UDP server端只能接收一次数据的问题?在线等,一直等............
  • udp方式抓取网页
  • python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
  • udp socket客户端和udp服务端程序示例分享
  • TCP与UDP通信问题!
  • 请问下怎么关闭SUSE 9.1下UDP的checksum?
  • 如何判断udp端口可达
  • 关于epoll&udp的问题?
  • UDP包怎么生成啊?用什么函数??简单问题,帮个忙哈
  • 对于socket UDP传输,一个端口只能被一个进程绑定?
  • IP,UDP,TCP的校验和计算
  • UDP协议在实现时有没有在发送端或者接收端设置缓冲区?
  • 基于UDP的数据传输 UDT
  • 服务进程收到的第一个UDP包的远端地址不对?
  • udp问题
  • 关于udp sendto时候端口选定问题


  • 站内导航:


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

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

    浙ICP备11055608号-3