本文介绍了阅读()的socket编程不堵的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有数据发送到客户端,每5秒的服务器。我想在客户端上阅读()阻塞,直到服务器发送一些数据,然后打印。我知道,阅读()默认情况下阻止。我的问题是我的客户不阻塞的read()。这是很奇怪的,这似乎并没有成为一个正常的问题。
我的code打印在一个无限循环没有回来。我是一个Linux机器上,C编程。我的code片断如下。请指点。
而(1)
{
N =读取(的sockfd,recvline,MAXLINE);
如果(N 0)
{
recvline [η] = 0;
如果(的fputs(recvline,标准输出)== EOF)
输出(的fputs错误);
}
否则,如果(N == 0)
的printf(没什么回来了);
否则如果(正℃,)
的printf(读取错误);
}
返回;
解决方案
有可能有几个原因,几个例外是可以在不同的地方:
-
检查插座在其中创建:
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) );
Check Read function call (Reason of bug)
Also check server code!:
One more interesting thing, Try to understand:
这篇关于阅读()的socket编程不堵的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!