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

请教各位一个关于linux网络编程的问题
请教linux网络编程的一个问题:
使用的是UDP协议接收和发送数据
C/C++ code

while(1)
{
    recv_rc = recvfrom(socket_descriptor, &seperate_info, sizeof(seperate_info), 0,
             (struct sockaddr *)&sin, &sin_len);
    if (recv_rc == -1)
    {
      perror ("recvfrom call failed");
      exit (errno);
    }
    //接收数据的处理
    ........
    ........
     //向PC发送数据
      send_frame((void*)p_1,512,2,vFrameNo++,sock,(struct sockaddr*)&sa_send,sizeof(sa_send));        
}



现象是这样的:
只有在接收到PC发送的数据,linux编写的程序才会执行 send_frame((void*)p_1,512,2,vFrameNo++,sock,(struct sockaddr*)&sa_send,sizeof(sa_send));
这条语句,请问各位有经验的高手们,这不是 recvfrom将程序阻塞在接收处了,有接收时才会执行发送,
各位这个问题如果解决,谢谢您的回复!!!!!!


------解决方案--------------------
没看懂什么意思

前面堵塞了,可不就走不到后面去吗
------解决方案--------------------
网上搜索下select或者poll或者epoll的用法 ,

或者直接用fcntl把socket设置成非阻塞的。
这样如果没有数据则,recvfrom立刻返回-1 ,errno为EAGAIN.
再看你程序逻辑是怎么的,