当前位置:  技术问答>linux和unix

recv效率低下的问题

    来源: 互联网  发布时间:2017-03-01

    本文导语:  如题,我在 linux 下调用recv,执行2277000次,总耗时90139966微秒 平均下来是39微秒一次,这个效率貌似不是很高啊! 我对recv的socket设置了如下属性 int i_buffer_size = INT_MAX;     if (setsockopt(sock, SOL_SOCKET, SO_RCVBUF,  ...

如题,我在 linux 下调用recv,执行2277000次,总耗时90139966微秒
平均下来是39微秒一次,这个效率貌似不是很高啊!
我对recv的socket设置了如下属性


int i_buffer_size = INT_MAX;

    if (setsockopt(sock, SOL_SOCKET, SO_RCVBUF,
        (const char*)(&i_buffer_size), sizeof(int)) == -1) {
            LOG_MSG("Socket Error: Adjust SO_RCVBUF failed.%s", strerror(errno));
            return false;
    }

    if (setsockopt(sock, SOL_SOCKET, SO_SNDBUF,
        (const char*)(&i_buffer_size), sizeof(int)) == -1) {
            LOG_MSG("Socket Error: Adjust SO_SNDBUF failed.%s", strerror(errno));
            return false;
    }

    int bOptVal = 1;
    int bOptLen = sizeof(int);
    if (setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE,
        (const char*)&bOptVal,bOptLen) == -1) {
            LOG_MSG("Socket Error: Adjust SO_KEEPALIVE failed.%s", strerror(errno));
            return false;
    }

    if (setsockopt(sock,IPPROTO_TCP,TCP_NODELAY,
        (const char*)&bOptVal,bOptLen) == -1) {
            LOG_MSG("Socket Error: Adjust TCP_NODELAY failed.%s", strerror(errno));
            return false;
    }

    if (setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,
        (const char*)&bOptVal,bOptLen) == -1) {
            LOG_MSG("Enable SO_REUSEADDR failed.%s", strerror(errno));
            return false;
    }

    struct linger lgr;
    memset(&lgr, 0x00, sizeof(struct linger));
    lgr.l_onoff = 0;
    if (setsockopt(sock, SOL_SOCKET, SO_LINGER,
        (const char*)&lgr, sizeof(linger)) == -1) {
            LOG_MSG("Socket Error: Adjust SO_LINGER failed.%s", strerror(errno));
            return false;
    }

    // linux kernel introduced
    bOptVal = 0;
    if (setsockopt(sock, IPPROTO_TCP, TCP_CORK,
        (const char*)&bOptVal, bOptLen) == -1) {
            LOG_MSG("Socket Error: Adjust TCP_CORK failed.%s", strerror(errno));
            return false;
    }

    // set socket to be non-blocking
    int on = 1;
    if (ioctl(sock,FIONBIO,(const char*)&on) 

    
 
 

您可能感兴趣的文章:

  • socket编程:recv(...)函数问题求救
  • 请教soclet中recv()函数最大返回值的问题
  • 关于recv函数的问题
  • 关于socket的send(),recv()的问题.
  • 求助:关于单线程recv时的超时问题
  • recv的问题~
  • 急!嵌入式linux下socket编程,recv()的问题:
  • ##socket编程中send&recv的问题
  • 求救:如何用select解决recv的阻塞问题
  • 关于socket编程的一个难点:recv()函数的返回问题!
  • 编程技术其它 iis7站长之家
  • linux下网络通信使用接受函数recv()问题?
  • recv的问题
  • linux c socket recv问题
  • 【急问】:关于send()和recv()的问题
  • 专门为难C或unix高手,recv或read之超时问题
  • recv读取套接字返回值问题
  • 问个recv函数的问题
  • 急啊!关于Http recv()接收图像的问题
  • 高分请教socket简单问题:客户端send数据过去,没有反应,recv时候失败。
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • recv如何使用?
  • 虚拟机的linux,在其中运行Server和Client,Server端send了一个大小4096B的包,客户端recv到3845B,用netstat查看连接,Recv-Q和Send-Q项显示为0,为什么没收完?其余字节哪去了??
  • socket编程 是recv阻塞
  • recv在什么情况下会返回0
  • socket tcp 关于 alarm() 和 recv() ?
  • 对recv函数第四个参数置0的疑问
  • linux 网络编程 recv函数
  • linux c recv
  • 请问 : read, 与recv 两个函数有什么区别啊?
  • recv 接收 ,接收空间不够大, 可以通过什么知道?
  • 求教!为何在socket编程中调recv函数无法阻塞?
  • socket中的疑问:read,write和send,recv的区别
  • linux c 网络编程时用 recv 函数
  • 请问:SCO UNIX下SOCKET的recv返回-1,errno=9?在线等·····
  • socket编程中的函数send和recv如何被信号中断?
  • (socket通信)poll提示有数据可读 recv却返回 EAGAIN
  • recv无法接受数据
  • recv返回值大于要得到的大小?
  • solaris socket 非阻塞recv产生 EBADF 错误
  • 为何我windows下面send 成功了。 。。但是linux的recv确返回 0


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3