zoukankan      html  css  js  c++  java
  • socket编程之TCP开发中的PEEK_MSG的使用与见解

    概述

    使用PEEK_MSG选项调用recv获取socket数据,可以简化socket处理逻辑,减少再次建设缓冲队列的复杂度;但也因此相对增加了系统底层的存储压力。

    适用范围

    对于一般客户端或者低用户量的服务端开发而言,使用PEEK_MSG先recv了消息,检查消息头,确认当前部分接收的消息已经基本完成了以后,再去调用不带选项的recv函数(注意传入需要去掉的长度)清空系统缓冲区的部分数据,可以一定程度上减轻逻辑复杂度。

    不适宜范围

    需要accept大量连接,或者需要减轻攻击可能性的服务端。正如上面所言,在减轻应用复杂度的同时,会增加系统的资源压力。

    注意事项

    既然是系统缓冲区,那肯定有预设一个区块大小了,如果是Linux的话,可以进入以下文件查看或者修改

    # 查看读写默认值
    cat /proc/sys/net/core/rmem_default
    cat /proc/sys/net/core/wmem_default
    # 查看读写最大值
    cat /proc/sys/net/core/rmem_max
    cat /proc/sys/net/core/wmem_max
    

    如果是代码查看并修改的话,可以参考如下:

    int defaultRecvBufSize = 0;
    int optLen = sizeof(rcvBufSize);
    getsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, &defaultRecvBufSize, &optLen);
    int rcvBufSize = 100*1024;
    setsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, &rcvBufSize, optlen)
    

    参考文章:https://www.cnblogs.com/lidabo/p/13936231.html

  • 相关阅读:
    MapReduce in MongoDB
    MongoDB的一些基本操作
    谈谈NOSQL
    Java中的反射(1)
    Mybatisの常见面试题
    关于Lombok和自动生成get set方法
    订Pizza(Java)
    美化Div的边框
    爱,死亡和机器人(Love,Death&Robots)
    session与cookie的介绍和两者的区别之其相互的关系
  • 原文地址:https://www.cnblogs.com/pureLaw/p/15405184.html
Copyright © 2011-2022 走看看