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

来源:互联网 发布:xampp修改mysql密码 编辑:程序博客网 时间:2024/05/16 16:23



#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);}




原创粉丝点击