当对方中断连接,关闭套接字的时候,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