首页 > 试题广场 >

如果在一个建立了TCP连接的socket上调用recv函数,

[单选题]
如果在一个建立了TCP连接的socket上调用recv函数,返回值为0,则表示()
  • 对端发送了一段长度为0的数据
  • 对端关闭了连接
  • 还没有收到对端数据
  • 连接发生错误
推荐
表示关闭连接,选择B

既然是网络连接,那么就来个流程图


解阻塞与非阻塞recv返回值没有区分,都是
  1. <0 出错
  2. =0 连接关闭
  3. >0 接收到数据大小,

编辑于 2015-01-31 15:23:43 回复(4)
答案:B
如果recv函数在等待协议接收数据时网络中断了,那么它返回0。默认 socket 是阻塞的。阻塞与非阻塞recv返回值没有区分,都是 <0 出错 =0 连接关闭 >0 接收到数据大小
发表于 2015-01-28 11:54:16 回复(0)
那当调用非阻塞recv时,且目前没有收到数据,那么返回值是???
发表于 2015-11-11 21:06:06 回复(2)
既然是网络连接,那么就来个流程图
 

解阻塞与非阻塞recv返回值没有区分,都是
  1. <0 出错
  2. =0 连接关闭
  3. >0 接收到数据大小,
发表于 2017-07-18 12:00:37 回复(0)
等于0表示:关闭连接
小于0表示:连接错误
大于0表示:收到数据
发表于 2018-04-09 09:33:34 回复(0)
1收到 0关闭 - 1出错
发表于 2018-02-05 15:15:38 回复(0)
在Socket API中,通过TCP socket接受对端数据时,使用recv()函数
接受数据时,网络协议将收到的应用数据存放到网络协议的接收缓存中,应用进程在调用recv()函数时,将接收缓存中的数据复制到应用缓存
如果recv()函数发生错误,返回SOCKET_ERROR;
如果recv()函数调用成功,则返回整数n,表示已成功将套接字接收缓存的n个字节数据复制到应用缓存中
如果套接字缓存中没有数据,recv()调用将阻塞,等待数据的到达
对于TCP套接字,如果recv()函数调用立即完成, 且n=0,则表示对端已关闭了连接,并且已接收全部数据
发表于 2017-07-12 09:36:16 回复(0)
解阻塞与非阻塞recv返回值没有区分,都是
  1. <0 出错
  2. =0 连接关闭
  3. >0 接收到数据大小,
发表于 2017-04-09 20:55:01 回复(0)
<0出错,=0关闭
发表于 2016-07-27 14:24:52 回复(0)
recv返回值说明:
成功执行时,返回接收到的字节数。另一端已关闭则返回0。失败返回-1,errno被设为以下的某个值   
EAGAIN or  EWOULDBLOCK :套接字已标记为非阻塞, 而接收操作被阻塞或者接收超时
EBADF:sock不是有效的描述词
ECONNREFUSE:远程主机阻绝网络连接
EFAULT:内存空间访问出错
EINTR:操作被信号中断
EINVAL:参数无效
ENOMEM:内存不足
ENOTCONN:与面向连接关联的套接字尚未被连接上
ENOTSOCK:sock索引的不是套接字
发表于 2016-07-04 10:21:10 回复(0)
RETURN VALUE
       These  calls return the number of bytes received, or -1 if an error occurred.  The return value will be 0 when the peer has performed an orderly shutdown.
发表于 2015-10-07 15:19:31 回复(0)
B
recv返回0的唯一情况是对端关闭连接。

发表于 2015-08-07 13:20:10 回复(0)
B
0 关闭连接
>0 接受数据
<0 出现错误
发表于 2015-03-10 10:30:56 回复(0)
B
recv返回0的唯一条件就是对端关闭了连接
在socket可读的情况下,当有异常发生的时候,read返回-1
发表于 2015-01-26 15:07:56 回复(0)