`
从此醉
  • 浏览: 1044545 次
  • 性别: Icon_minigender_1
  • 来自: US
社区版块
存档分类
最新评论

Linux 下C 网络编程 setsockopt getsockopt 基础练习

 
阅读更多



#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <assert.h>
/*
  * This function reports the error and
   * exits back to the shell:
 */
static void bail(const char *on_what) {
    if (errno != 0) {
        fputs(strerror(errno), stderr);
        fputs(": ", stderr);
    }
    fputs(on_what, stderr);
    fputc('\n', stderr);
    exit(1);
}

int main(int argc, char **argv) {
    int z;
    int s = -1; /* Socket */
    int sndbuf = 0; /* 发送缓冲区大小  */
    int rcvbuf = 0;/* 接收缓冲区大小  */

    socklen_t optlen; /* 设置项长度 (字节)*/

    /*
     *建立一个 TCP/IP socket做测试:
       */
    s = socket(PF_INET, SOCK_STREAM, 0);
    if (s == -1)
        bail("socket(2)");

     // 设置SO_SNDBUF Size:ss
    sndbuf = 5000; /* Send buffer size */
    z = setsockopt(s, SOL_SOCKET, SO_SNDBUF, &sndbuf, sizeof sndbuf);

    if (z)
        bail("setsockopt(s,SOL_SOCKET,"
                "SO_SNDBUF)");

    /** 设置SO_RCVBUF 大小:      */
    rcvbuf = 8192; /* Send buffer size */
    z = setsockopt(s, SOL_SOCKET, SO_RCVBUF, &rcvbuf, sizeof rcvbuf);

    if (z)
        bail("setsockopt(s,SOL_SOCKET,"
                "SO_RCVBUF)");

    /*
       *       检查上面的设置
       * Get socket option SO_SNDBUF:
    */
    optlen = sizeof sndbuf;
    z = getsockopt(s, SOL_SOCKET, SO_SNDBUF, &sndbuf, &optlen);
    if (z)
        bail("getsockopt(s,SOL_SOCKET,"
                "SO_SNDBUF)");

    assert(optlen == sizeof sndbuf);

    /* * 得到设置的socket选项 SO_SNDBUF:*/
    optlen = sizeof rcvbuf;
    z = getsockopt(s, SOL_SOCKET, SO_RCVBUF, &rcvbuf, &optlen);
    if (z)
        bail("getsockopt(s,SOL_SOCKET,"
                "SO_RCVBUF)");

    assert(optlen == sizeof rcvbuf);

    /* * 输出缓冲区的大小:*/
    printf("Socket s : %d\n", s);
    printf(" Send buf: %d bytes\n", sndbuf);
}




分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics