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]#

  • 相关阅读:
    Eletron 打开文件夹,截图
    nodejs 与 json
    drupal sql 源码解析query.inc 文件
    The maximum column size is 767 bytes (Mysql)
    php 过滤emoji
    Mysql delete操作
    Mysql update 一个表中自己的数据
    form 表单排序
    jquery parents用法
    MYSQL数据库重点:流程控制语句
  • 原文地址:https://www.cnblogs.com/createyuan/p/4201739.html
Copyright © 2011-2022 走看看