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

阻塞方式,read不返回!!!

    来源: 互联网  发布时间:2015-12-10

    本文导语:  建立了一个很基本的socket client,write了一个Get请求到网站的80端口,能够获取到服务器的请求,但是在利用read循环读取数据的时候,读取一些数据后read被阻塞,但是不返回? 而且,我换一个网站get,则能get到数据,...

建立了一个很基本的socket client,write了一个Get请求到网站的80端口,能够获取到服务器的请求,但是在利用read循环读取数据的时候,读取一些数据后read被阻塞,但是不返回?
而且,我换一个网站get,则能get到数据,read也能返回。
while ((rc = read(s, buf, BUF_LEN)) > 0)
{
                  printf("rc = %dn", rc);
writen(fd, ptr, rc);

}
其中s为一socket 描述符,fd为一文件句柄。

执行的时候输出:
rc = 1448
rc = 1448
rc = 1448
rc = 1448
rc = 1448
rc = 630
...
程序停在...处,read函数不返回!

请教为什么呢?

|
阻塞模式下:read一定要读到数据才返回的,你这里停止是正常的

|
解释的很通。多写程序多试试。

阻塞方式下三种情况会返回:
1.读到了足够的字节
2.遇到EOF
3.收到signal
       It  is not  an  error  if  this  number  is smaller than the number of bytes
       requested; this may happen for example because fewer bytes are  actu-
       ally available right now (maybe because we were close to end-of-file,
       or because we are reading from  a  pipe,  or  from  a  terminal),  or
       because  read()  was  interrupted  by  a  signal.

非阻塞方式多一种:
4.无数据可读
       EAGAIN Non-blocking  I/O  has  been  selected using O_NONBLOCK and no
              data was immediately available for reading.

    
 
 

您可能感兴趣的文章:

  • getchar()在非阻塞时的返回值
  • poll函数永远阻塞之后能够手动使之返回吗,就像win系统中的WaitForSingleObjec(hEvent.) 我可以通过 SetEvent(hEvent)来让wait返回.
  • 请问exec系列函数在执行时是立即返回还是有可能阻塞那?
  • 如何使gethostbyname()超时返回,不要永远阻塞
  • 请问:我发现在linux上的网络编程时, 若客户端连不上服务端,就会阻塞,但如果是在UNIX上,若连不上,会马上返回,并不阻 塞,怎样让它也能阻塞啊?
  • 牛人进啊!串口非阻塞模式打开,但read不能立即返回!
  • sigprocmask函数对不再阻塞信号的返回问题
  • 关于sigpending()无法返回被阻塞信号集的问题
  • 为什么服务器端的recvfrom不阻塞等待客户端的数据就返回了?
  • 非阻塞方式socket中, 去读select返回的sockfd是否一定是非0值??如果读到的字节数比期望少有没有什么好的处理模式??
  • 非阻塞socket发送返回的size小于要发送的大小的问题
  • 非阻塞connect实现端口扫描的问题-connect提前返回怎么处理?
  • 怎么样以非阻塞的方式从管道中读取数据?因为我用read函数时,如果管道没有数据就会阻塞住???
  • linux多线程无法进行阻塞方式的读写操作
  • 能不能有多线程非阻塞方式?
  • linux多线程无法进行阻塞方式的读写操作?
  • linux下如何设置一个socket为非阻塞方式?
  • 如何中断阻塞方式accept调用
  • Linux中串口read怎样阻塞的方式读入数据
  • 请问非阻塞方式下connect连接成功的判断?
  • C实现的非阻塞方式命令行端口扫描器源码
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • select如何实现发送的阻塞和解除阻塞?
  • Linux下read函数默认到底是阻塞的还是非阻塞的?
  • 如何从阻塞式的read中取得阻塞了多少时间?
  • Select() 是否只能在非阻塞IO里使用,在阻塞IO里可以使用吗?
  • 请教sleep和pthread_delay_np:阻塞线程/阻塞进程?
  • recvfrom函数,已经设置好非阻塞模式,是否还存在阻塞的风险?
  • 怎么解除recvfrom阻塞的阻塞状态
  • linux 如何用SOCKET设置函数设置阻塞和非阻塞?
  • 非阻塞SOCKET,竟然也会阻塞?
  • 请教:线程中调用一个阻塞的方法后,进程及其它线程会阻塞么?
  • linux C socke编程 创建的socket默认是阻塞的还是非阻塞的?
  • 什么是非阻塞啊?我用下面的程序设计的,用非阻塞和不用都一样啊?
  • 初级问题,socket(AF_INET, SOCK_STREAM, 0)是阻塞式还是非阻塞式?
  • 关于《Unix网络编程》在ubuntu 8.04下运行的问题,服务器端阻塞在accept调用,客户端阻塞在connect调用,导致连接失败
  • 关于socket编程中阻塞的问题
  • linux fwrite 阻塞问题
  • 关于非阻塞I/O
  • 如何判断一个线程是否处于阻塞状态
  • 关于fread是否会阻塞的问题
  • 阻塞


  • 站内导航:


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

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

    浙ICP备11055608号-3