使用getsockopt检查SO_DEBUG选项的初始值

时间:2017-11-10 17:11:42

标签: c++ sockets network-programming

我想了解getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen)的性质 我正在尝试查看SO_DEBUG的初始状态,我指的是此链接https://www.mkssoftware.com/docs/man3/getsockopt.3.asp,我不确定我是否以正确的方式执行此操作,因为我得到的是随机值。

    //***********************************************Libraries****************************************************************
    #include <iostream>
    #include <sys/socket.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <arpa/inet.h>
    #include <netinet/in.h>
    #include <string.h>
    #include <errno.h>
    using namespace std;
    //************************************************************************************************************************

    int main()
    {

            int * optval;

            int optionDebug = 0;
            socklen_t  optlen;
            int sockFD;
            sockFD = socket(AF_INET, SOCK_STREAM ,0);

            optlen =sizeof(optval);

            int udpFD;
            udpFD = socket(AF_INET, SOCK_DGRAM,0);

            optionDebug = getsockopt(sockFD, SOL_SOCKET, SO_DEBUG, optval, &optlen) ;

            cout<<"My value "<< *optval<<endl;

            return 0;
    }

1 个答案:

答案 0 :(得分:0)

要检索optval的值,您需要传递有效变量的地址(而不是未初始化的指针):

   ExpectedOptType optval;
// ^^^^^^^^^^^^^^^ Put whatever type (probably a enum) is expected for
//                 the specific option
   optionDebug = getsockopt(sockFD, SOL_SOCKET, SO_DEBUG, &optval, &optlen);
                                                       // ^

详细了解其工作原理:getsockopt(2)