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

recv的问题

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

    本文导语:  服务器端: char pSendMsg[ ] = "Send message and receive message OK."; int rflags1 =  0 ; recv(sockfd, pRecvMsg, 100, rflags1); 客户端: char pSendMsg[ ] = "Send message and receive message OK."; int rflags2 =  0 ; recv(sockfd, pRecvMsg, 100, rf...

服务器端:
char pSendMsg[ ] = "Send message and receive message OK.";
int rflags1 =  0 ;
recv(sockfd, pRecvMsg, 100, rflags1);
客户端:
char pSendMsg[ ] = "Send message and receive message OK.";
int rflags2 =  0 ;
recv(sockfd, pRecvMsg, 100, rflags2);
以上设置后程序正常运行,因为我的rflags置为0,
rflags的取值
MSG_DONTROUTE:是send函数使用的标志.这个标志告诉IP协议.目的主机在本地网络上面,没有必要查找路由表.这个标志一般用网络诊断和路由程序里面.  
MSG_OOB:表示可以接收和发送带外的数据.关于带外数据我们以后会解释的.  

MSG_PEEK:是recv函数的使用标志,表示只是从系统缓冲区中读取内容,而不清楚系统缓冲区的内容.这样下次读的时候,仍然是一样的内容.一般在有多个进程读写数据时可以使用这个标志.  

MSG_WAITALL是recv函数的使用标志,表示等到所有的信息到达时才返回.使用这个标志的时候recv回一直阻塞,直到指定的条件满足,或者是发生了错误. 1)当读到了指定的字节时,函数正常返回.返回值等于len 2)当读到了文件的结尾时,函数正常返回.返回值小于len 3)当操作发生错误时,返回-1,且设置错误为相应的错误号(errno) 

-----------------------------------------
情况1于是我在服务器段设置rflags1=MSG_WAITALL,rflags2=0结果服务器和客户端都阻塞,我理解是没有收到制定的字节,也没有读到文件的结尾,
情况2但是我设置rflags=0,rflags2=MSG_WAITALL,程序运行正常,按照1的理解,如果阻塞,我觉得很容易接受,但是事实相反,
那么2)当读到了文件的结尾时,函数正常返回.返回值小于len ,我的字符串结束算不算读到了文件的结尾?
如果算情况1怎么解释,如果不算情况2怎么回事?

我多次试验,依然不明白,希望高人告诉我。

|
楼主,情况1是不是因为你服务器端切断了连接了,我查了一下MSG_WAITALL唯一可能就是楼主切断连接了。

    
 
 

您可能感兴趣的文章:

  • socket编程:recv(...)函数问题求救
  • 请教soclet中recv()函数最大返回值的问题
  • 关于recv函数的问题
  • 关于socket的send(),recv()的问题.
  • 求助:关于单线程recv时的超时问题
  • recv的问题~
  • 急!嵌入式linux下socket编程,recv()的问题:
  • ##socket编程中send&recv的问题
  • 求救:如何用select解决recv的阻塞问题
  • 关于socket编程的一个难点:recv()函数的返回问题!
  • Connection reset by peer: JVM_recv in socket input stream read这个问题到底怎么解决??
  • linux下网络通信使用接受函数recv()问题?
  • linux c socket recv问题
  • 【急问】:关于send()和recv()的问题
  • 专门为难C或unix高手,recv或read之超时问题
  • recv读取套接字返回值问题
  • recv效率低下的问题
  • 问个recv函数的问题
  • 急啊!关于Http recv()接收图像的问题
  • 高分请教socket简单问题:客户端send数据过去,没有反应,recv时候失败。
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • recv如何使用?
  • 虚拟机的linux,在其中运行Server和Client,Server端send了一个大小4096B的包,客户端recv到3845B,用netstat查看连接,Recv-Q和Send-Q项显示为0,为什么没收完?其余字节哪去了??
  • socket编程 是recv阻塞
  • recv在什么情况下会返回0
  • socket tcp 关于 alarm() 和 recv() ?
  • 对recv函数第四个参数置0的疑问
  • linux 网络编程 recv函数
  • linux c recv
  • 请问 : read, 与recv 两个函数有什么区别啊?
  • recv 接收 ,接收空间不够大, 可以通过什么知道?
  • 求教!为何在socket编程中调recv函数无法阻塞?
  • socket中的疑问:read,write和send,recv的区别
  • linux c 网络编程时用 recv 函数
  • 请问:SCO UNIX下SOCKET的recv返回-1,errno=9?在线等·····
  • socket编程中的函数send和recv如何被信号中断?
  • (socket通信)poll提示有数据可读 recv却返回 EAGAIN
  • recv无法接受数据
  • recv返回值大于要得到的大小?
  • HTML教程 iis7站长之家
  • 为何我windows下面send 成功了。 。。但是linux的recv确返回 0


  • 站内导航:


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

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

    浙ICP备11055608号-3