关于recv的返回值】的更多相关文章

1.    前言 很多朋友在做网络编程开发的时候可能都遇到这样的问题,在进行接收二进制流的数据的时候,使用strlen库函数来得到 二进制数据长度的时候并不准确.为什么呢??首先,使用strlen进行统计长度的为字符串,并非二进制流数据,因此在 获取二进制数据流的定长中并不适合.解决的问题必然使用网络接收函数的返回值来进行判断,如recv和recvfrom等. 2.    简单的网络服务器 Linux中简单的网络服务器做起来很简单,无非就是以下几个步骤 创建网络套接字(socket) --> 绑…
recv函数 int recv( SOCKET s, char FAR *buf, int len, int flags); 不论是客户还是服务器应用程序都用recv函数从TCP连接的另一端接收数据. 该函数的第一个参数指定接收端套接字描述符: 第二个参数指明一个缓冲区,该缓冲区用来存放recv函数接收到的数据: 第三个参数指明buf的长度: 第四个参数一般置0. 这里只描述同步Socket的recv函数的执行流程.当应用程序调用recv函数时, (1)recv先等待s的发送缓冲中的数据被协议传…
通常recv有几种返回值 1.==0 表示收到FIN包, 因为FIN包,是状态为标记为FIN的空包,没有携带数据,所以recv的长度为0 2.>0 表示收到了数据, 但是有没有收完,是不知道的 3.<0 1) == EAGAIN  表示接收缓冲区中已经没数据了,需要暂停下,业务程序需要检查下包的完整性,才知道有没有收完,如果没收完,就继续recv 2) != EAGAIN  表示接收出错了,如果是服务端, 就可以直接关闭连接了. 切记收到FIN包后,准备关闭连接前,一定要处理完接收缓冲区中的数…
函数原型: ssize_t recv(int sockfd, void *buf, size_t len, int flags); 该函数第一个参数制定接收端套接字描述符; 第二个参数指明一个缓冲区,该缓冲区用来存放recv函数接收到的数据; 第三个参数指明缓冲区buf的长度; 第四个参数一般置0; (标志位) recv函数返回其实际copy的字节数.如果recv在copy时出错,那么它返回SOCKET_ERROR; 如果recv函数在等待协议接收数据时网络中断了,那么它返回0; recv函数仅…
1.阻塞模式与非阻塞模式下recv的返回值各代表什么意思?有没有区别?(就我目前了解阻塞与非阻塞recv返回值没有区分,都是 <0:出错,=0:连接关闭,>0接收到数据大小,特别:返回值 <0时并且(errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)的情况下认为连接是正常的,继续接收.只是阻塞模式下recv会阻塞着接收数据,非阻塞模式下如果没有数据会返回,不会阻塞着读,因此需要 循环读取 2.阻塞模式与非阻塞模式下writ…
1.阻塞模式与非阻塞模式下recv的返回值各代表什么意思?有没有 区别?(就我目前了解阻塞与非阻塞recv返回值没有区分,都是 <0:出错,=0:连接关闭,>0接收到数据大小,特别:返回 值 <0时并且(errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)的情况 下认为连接是正常的,继续接收.只是阻塞模式下recv会阻塞着接收数据,非阻塞模式下如果没有数据会返回,不会阻塞着读,因此需要 循环读取 2.阻塞模式与非阻塞模式下w…
1.阻塞模式与非阻塞模式下recv的返回值各代表什么意思?有没有区别?(就我目前了解阻塞与非阻塞recv返回值没有区分,都是 <0:出错,=0:连接关闭,>0接收到数据大小,特别:返回值 <0时并且(errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)的情况下认为连接是正常的,继续接收.只是阻塞模式下recv会阻塞着接收数据,非阻塞模式下如果没有数据会返回,不会阻塞着读,因此需要 循环读取 2.阻塞模式与非阻塞模式下writ…
http://blog.csdn.net/anghlq/article/details/5990513 在Unix系统下,如果send . recv . write在等待协议传送数据时 , socket 被 shutdown,调用send的进程会接收到一个SIGPIPE信号,进程对该信号的默认处理是进程终止. 此种情况 应用就很难查 出 处理进程为什么退出. SIGPIPE 信号: 对 一个已经收到FIN包的socket调用read方法, 如果接收缓冲已空, 则返回0, 这就是常说的表示连接关闭…
转载:http://blog.csdn.net/henry115/article/details/7054603 recv函数 int recv( SOCKET s, char FAR *buf, int len, int flags); 不论是客户还是服务器应用程序都用recv函数从TCP连接的另一端接收数据.该函数的第一个参数指定接收端套接字描述符: 第二个参数指明一个缓冲区,该缓冲区用来存放recv函数接收到的数据: 第三个参数指明buf的长度: 第四个参数一般置0. 这里只描述同步Soc…
recv函数 int recv( SOCKET s, char FAR *buf, int len, int flags); 不论是客户还是服务器应用程序都用recv函数从TCP连接的另一端接收数据.该函数的第一个参数指定接收端套接字描述符: 第二个参数指明一个缓冲区,该缓冲区用来存放recv函数接收到的数据: 第三个参数指明buf的长度: 第四个参数一般置0. 这里只描述同步Socket的recv函数的执行流程.当应用程序调用recv函数时, (1)recv先等待s的发送缓冲中的数据被协议传送…