没有合适的资源?快使用搜索试试~ 我知道了~
首页socket_recv函数使用心得.
socket_recv函数使用心得.
需积分: 50 5.0k 浏览量
更新于2023-05-27
评论 3
收藏 28KB DOC 举报
这是一份关于 socket_recv的文档,相信对想学习 socket_recv的同学一定有很大的帮助!
资源详情
资源评论
资源推荐

recv 的超时总结
说明:针对 recv 返回值,阻塞情况下,当网络异常时,recv 是返回个-1,还
是阻塞不动,还是根据情况而定呢
一
1. 不论是阻塞还是非阻塞,都是 <0:出错,=0:连接关闭,>0 接收到数据大
小
2. Recv<0 情况
1、 特 别 : 返 回 值 <0 时 并 且 (errno == EINTR || errno ==
EWOULDBLOCK || errno == EAGAIN)的情况下认为连接是正常的,继续接收。
2、 只是阻塞模式下 recv 会阻塞着接收数据,非阻塞模式下如果没有数
据会返回,不会阻塞着读,因此需要循环读取)。阻塞情况下,阻塞接收,
不会返回负数吗?
3、 很多人说阻塞模式下 read 会阻塞着读,是否这样?我和同事试了不
会阻塞,而是会返回一个负数。对吗?
4、 阻 塞 模 式 下 read 返 回 值 < 0 && errno != EINTR && errno !=
EWOULDBLOCK && errno != EAGAIN 时,连接异常,需要关闭,read 返回
值 < 0 && (errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)时
表示没有数据,需要继续接收,如果返回值大于 0 表示接送到数据。
二
getsockopt 与 setsockopt
1. getsockopt 可以获取套接字的属性,Setsockopt 可以设置套接字的属性。
Int getsockopt(int s, int level, int optname, void *optval, socketlen_t *optlen)
int setsockopt(int s, int level, int optname, const void *optval, socketlen_t
optlen)。两个函数成功返回 0,失败返回-1,错误代码存于 errno 中。
2. S:套接字
Level:套接字选项操作的层次。可以取:SOL_SOCKET(通用套接字);
IPPROTO_IP(IP 层套接字);IPPROTO_TCP(TCP 层套接字)。
Optname:套接字选项名称
Optval:套接字选项的值
Optlen:选项值的大小
3. 通用套接字的选项
a) SO_KEEPPALIVE:如果一段时间内没有反应,则关闭 socket。若没
有设置此选项,则 socket 一直被阻塞。
b) SO_RCVLOWAT : 接 收 缓 冲 区 的下限,只有缓冲区数据 超 过 了
SO_RCVLOWAT 才会将数据传到上层应用层。
SO_SNDLOWAT:发送缓冲区的下限,……..才会将数据发送。
c) SO_RCVTIMEO:设置套接字的超时时间,见结构体 struct timeval.
d) SO_BINDTODEVICE:将套接字绑定到特定的网络接口,如 eth0。
e) SO_DEBUG:只能对 TCP 套接字使用,设置该选项后系统将保存

















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0