zoukankan      html  css  js  c++  java
  • c编码-2

    1.重设socket缓冲区

    系统提供的socket缓冲区大小为8K,你可以将之设置为64K,尤其在传输实时视频时。 

    [root@8A_3 src]# gcc socka.c
    [root@8A_3 src]# ls
    a.out  aa  ba.txt  socka.c
    [root@8A_3 src]# ./a.out
     发送缓冲区原始大小为: 16384 字节
     接收缓冲区原始大小为: 87380 字节
     发送缓冲区大小为: 20480 字节
     接收缓冲区大小为: 20480 字节
    [root@8A_3 src]# cat socka.c
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <string.h>
    #include <errno.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <assert.h>

    int main(int argc,char **argv)
    {
        int err = -1;        /* 返回值 */
        int s = -1;            /* socket描述符 */
        int snd_size = 0;   /* 发送缓冲区大小 */
        int rcv_size = 0;    /* 接收缓冲区大小 */
        socklen_t optlen;    /* 选项值长度 */

        /*
         * 建立一个TCP套接字
         */
        s = socket(PF_INET,SOCK_STREAM,0);
        if( s == -1){
            printf("建立套接字错误 ");
            return -1;
        }

        /*
         * 先读取缓冲区设置的情况
         * 获得原始发送缓冲区大小
         */
        optlen = sizeof(snd_size);
        err = getsockopt(s, SOL_SOCKET, SO_SNDBUF,&snd_size, &optlen);
        if(err<0){
            printf("获取发送缓冲区大小错误 ");
        }
        /*
         * 打印原始缓冲区设置情况
         */

        /*
         * 获得原始接收缓冲区大小
         */
        optlen = sizeof(rcv_size);
        err = getsockopt(s, SOL_SOCKET, SO_RCVBUF, &rcv_size, &optlen);
        if(err<0){
            printf("获取接收缓冲区大小错误 ");
        }

       printf(" 发送缓冲区原始大小为: %d 字节 ",snd_size);
       printf(" 接收缓冲区原始大小为: %d 字节 ",rcv_size);

        /*
         * 设置发送缓冲区大小
         */
        snd_size = 10*1024;    /* 发送缓冲区大小为8K */
        optlen = sizeof(snd_size);
        err = setsockopt(s, SOL_SOCKET, SO_SNDBUF, &snd_size, optlen);
        if(err<0){
            printf("设置发送缓冲区大小错误 ");
        }

        /*
         * 设置接收缓冲区大小
         */
        rcv_size = 10*1024;    /* 接收缓冲区大小为8K */
        optlen = sizeof(rcv_size);
        err = setsockopt(s,SOL_SOCKET,SO_RCVBUF, (char *)&rcv_size, optlen);
        if(err<0){
            printf("设置接收缓冲区大小错误 ");
        }

        /*
         * 检查上述缓冲区设置的情况
         * 获得修改后发送缓冲区大小
         */
        optlen = sizeof(snd_size);
        err = getsockopt(s, SOL_SOCKET, SO_SNDBUF,&snd_size, &optlen);
        if(err<0){
            printf("获取发送缓冲区大小错误 ");
        }

        /*
         * 获得修改后接收缓冲区大小
         */
        optlen = sizeof(rcv_size);
        err = getsockopt(s, SOL_SOCKET, SO_RCVBUF,(char *)&rcv_size, &optlen);
        if(err<0){
            printf("获取接收缓冲区大小错误 ");
        }

        /*
         * 打印结果
         */
        printf(" 发送缓冲区大小为: %d 字节 ",snd_size);
        printf(" 接收缓冲区大小为: %d 字节 ",rcv_size);

        close(s);
        return 0;

    }
    [root@8A_3 src]#

  • 相关阅读:
    将python对象序列化成php能读取的格式(即能反序列化到对象)
    Atitit.研发管理---api版本号策略与版本控制
    Atitit.研发管理---api版本号策略与版本控制
    Atitit.jsou html转换纯文本 java c# php
    Atitit.jsou html转换纯文本 java c# php
    atitit.基于bat cli的插件管理系统.doc
    atitit.基于bat cli的插件管理系统.doc
    atititi.soa  微服务 区别 联系 优缺点.doc
    atititi.soa  微服务 区别 联系 优缺点.doc
    userService 用户 会员 系统设计 v2 q224 .doc
  • 原文地址:https://www.cnblogs.com/createyuan/p/4201739.html
Copyright © 2011-2022 走看看