2017-11-10 4 views
0

getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen)の性質を理解しようとしています。
私はSO_DEBUGの初期状態を確認しようとしていますが、このリンクhttps://www.mkssoftware.com/docs/man3/getsockopt.3.aspを参照しています。ランダムな値を取得しているため、これを正しく実行しているかどうかはわかりません。あなたは有効な変数(ない初期化されていないポインタ)のアドレスを渡す必要がoptvalの値取得するにgetsockoptを使用してSO_DEBUGオプションの初期値を確認する

//***********************************************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; 
    } 

答えて

0

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)

+0

私は上記の修正を行い、私のプログラムの出力は0でした。それは、ソケットを作成したときにSO_DEBUGオプションが最初にfalseに設定されたことを意味しますか? – Swornim1

+0

@ Swornim1おそらくはい。 'setsockopt()'を適用した後に値を再読み込みしてみてください。 – user0042

関連する問題