recv返回0对方已经saygoodbye,返回-1意味着异常中断

当对方中断连接,关闭套接字的时候,recv将返回0,告诉自己:不想跟你打交道了
         当对方与你失去连接,很遗憾,我们之间也不可能通讯了,还是别的方式交流吧。
        当我以为判断recv返回-1就已经足够的证明:自己的仔细,但是0注定只是一个鸭蛋,需要重新估量的分量。
    没有多余的言语描述自己在初级阶段的尝试,就像一个婴儿学飞,注定是一只笨鸟。
    有没有想过重新使用一个已经被抛弃的SOCKET,为的就是减少绑定的绳索。不敢尝试,代价无法接受的浅薄。
    发送一个空的字符串,其实对方一样也能够接收到,相同内存空间大小的空字符串。
     char recvBuf[1000];
 int len=recv(sockClient,recvBuf,sizeof(recvBuf),0);
 printf("%s\n",recvBuf);//空
 printf("%d\n",len);//100

说明:

一、参数有错
二、在非套接字上进行操作或者套接字已失效
三、被信号中断
四、在一个非阻塞套接字上接收,并且数据未准备好
五、套接字未连接
六、远程主机拒绝
七、指定的缓冲获越界了
对于无连接的socket而言,用recvfrom返回0表示收到0字节数据,对于有连接的socket, recvfrom返回0表示对方关闭了连接,这个是规定而非必需如此,比如写这个系统调用或函数的人也可以让recvfrom这个函数对于无连接的socket返回-1,然后把errno设置成为一个ENODATA或什么的,对于有连接的socket这个函数也完全可以返回-1然后把errno设置成一个对应的E...来表示对方关闭连接。
recv返回0代表连接中断,返回-1呢

时间: 2024-10-13 17:38:17

recv返回0对方已经saygoodbye,返回-1意味着异常中断的相关文章

sql server聚合函数sum计算出来为空,怎样返回0

通常我们计算数据库中表的数据有几个常用的聚合函数 1.count : 计数 2.sum: 计算总和 3.avg: 取平均值 4.max: 取最大值 5.min: 取最小值 6.isnull: 当返回数据为空,默认设置为0 7.coalesce: 当返回数据为空,默认设置为0 1.count的使用 下面是一个student表的所有数据 1) 计算表中数据的数量,count(*),返回结结果是6 2)计数表中地址数据的数量,count(address),返回结果是5 2.sum的使用 1)计算总的年

socket 中read返回0的情况

当client,调用read(socketfd,buffer,n)时,返回0的情况: 1.server端调用了close(soketfd)函数 2.server调用了close(fd,SHUT_WR),关闭server端的写连接,半关闭 关于close 和shutdown的过程 一.void close(fd):close发送的是FIN分节(不一定是发送FIN,也可能发送RST(如果local接受缓冲区的数据没有被读完):sever端close时候,如果发送了FIN,则这个sokcet在serv

NIO中SocketChannel read()返回0的原因

转载地址http://blog.csdn.net/cao478208248/article/details/41648359 当socketChannel为阻塞方式时(默认就是阻塞方式)read函数,不会返回0,阻塞方式的socketChannel,若没有数据可读,或者缓冲区满了,就会阻塞,直到满足读的条件,所以一般阻塞方式的read是比较简单的,不过阻塞方式的socketChannel的问题也是显而易见的.这里我结合基于NIO 写ftp服务器调试过程中碰到的问题,总结一下非阻塞场景下的read

Reverse Integer - 反转一个int,溢出时返回0

Reverse Integer Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 若反转的数溢出,直接返回0 可以用计算结果来判断溢出,也可以用因数来判断 Java代码实现: 1 public class ReverseInteger { 2 public static int reverseInt(int x){ 3 if (x == 0) { 4 return

编写一个函数char_contains(char str[],char c), 如果字符串str中包含字符c则返回数值1,否则返回数值0

/* 编写一个函数char_contains(char str[],char c), 如果字符串str中包含字符c则返回数值1,否则返回数值0 */ #include <string.h> #include <stdio.h> // 可读性 -> 性能 -> 精简(重构) int char_contains(char str[], char c); int main() { //int result = char_contains("itc8ast"

Js中的天坑----JS:parseInt(&quot;08&quot;)和“09”返回0

今天在程序中出现一个bugger ,调试了好久,最后才发现,原来是这个问题. 做了一个实验: alert(parseInt("01")),当这个里面的值为01====>07时都是正常的,但是在"08","09"就会返回0 (这种现象出现在ie内核的浏览器中,如360浏览器就会出现这种错误)(谷歌,火狐不受影响) . 查阅资料得知着这种现象原因: 大神的解释: 01--07自然没有问题,但是09,08都是不合格的八进制形式,所以被按照0处理了

【代码优化】返回0长度数组或者集合

改掉你从C语言继承过来的习惯,我们在java中没理由返回类型为数组或者集合返回null. private final List<Cheese> InStock =...; public Cheese[] getCheeses() { if( InStock.size() ==0){ return null; } } 这种是我们经常使用的 返回的模式,这就带来在应用Cheese数组的时候 都需要判断数组是否为null. Cheese[] cheeses= shop.getCheeses(); i

求一个整型数字中有没有相同的部分,例如12386123这个整型数字中相同的部分是123,相同的部分至少应该是2位数,如果有相同部分返回1,如果没有则返回0。方法是先将整型数字转换到数组中,再判断。函数为 int same(int num)其中num是输入的整型数字

import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Test { public static void main(String[] args) { /** * 2.求一个整型数字中有没有相同的部分,例如12386123这个整型数字中相同的部分是123, * 相同的部分至少应该是2位数,如果有相同部分返回1,如果没有则返回0. * 方法是先将整型数字转换到数组中,再判断.

SQL-如果指定值存在返回1,如果不存在返回0的SQL语句

想实现简单的判断一个表中是否有一条记录,可以用这个方式.如以下,table_name是表名,column1是列名. 这条语句会在此条记录存在的时候返回1,不存在时返回0. 1 SELECT EXISTS(SELECT 1 FROM table_name WHERE column1=value)