本文介绍了阅读()的socket编程不堵的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有数据发送到客户端,每5秒的服务器。我想在客户端上阅读()阻塞,直到服务器发送一些数据,然后打印。我知道,阅读()默认情况下阻止。我的问题是我的客户不阻塞的read()。这是很奇怪的,这似乎并没有成为一个正常的问题。

我的code打印在一个无限循环没有回来。我是一个Linux机器上,C编程。我的code片断如下。请指点。

 而(1)
{
    N =读取(的sockfd,recvline,MAXLINE);
    如果(N 0)
    {
        recvline [η] = 0;
        如果(的fputs(recvline,标准输出)== EOF)
            输出(的fputs错误);
    }
    否则,如果(N == 0)
        的printf(没什么回来了);
    否则如果(正℃,)
        的printf(读取错误);
}
返回;


解决方案

有可能有几个原因,几个例外是可以在不同的地方:


  1. 检查插座在其中创建:

  2. You and also enable blocking mode explicitly before use it:

    or you can use setsockopt as below:

     struct timeval t;    
     t.tv_sec = 0;
     tv_usec = 0;
     setsockopt(
          sockfd,     // Socket descriptor
          SOL_SOCKET, // To manipulate options at the sockets API level
          SO_RCVTIMEO,// Specify the receiving or sending timeouts 
          const void *(&t), // option values
          sizeof(t) 
      );   
    

  3. Check Read function call (Reason of bug)

  4. Also check server code!:

  5. One more interesting thing, Try to understand:

这篇关于阅读()的socket编程不堵的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-26 23:17