0

Cでのソケットプログラミングの問題に直面しています。C接続機能を使用してソケットを開くアプリケーションがあります。ソケットを介した暗号化は必要ありません。このアプリケーションはopensslライブラリの関数も(他の目的で)使用するため、コンパイル中にlsslとリンクする必要があります。このlsslへのリンクが原因で、アプリケーションは失敗します。何が起こっているのかわかりません。opensslリンケージがCの接続をオーバーライドしているのでしょうか。そして、SSLライブラリを使用するとともにCのソケット関数を使用することは正しいアプローチですか?

4

2 に答える 2

0

接続するまでソケットを開くコードは次のとおりです。

int memfsnode_init()
{
    int sockfd, portno, n,len,i,x,y;
    long l;
    struct sockaddr_in serv_addr;

    portno = METADATASERVER_PORT; //port = 5000
    char *serverip;
    serverip=(char*)malloc(20*sizeof(char));
    strncpy(serverip,"127.0.0.1",strlen("127.0.0.1"));
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0)
        error("ERROR opening socket");
    bzero((char *) &serv_addr, sizeof(serv_addr));
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = inet_addr(serverip);
    serv_addr.sin_port = htons(portno);
    if (connect(sockfd,(struct sockaddr*)&serv_addr,sizeof(serv_addr)) < 0)
        error("ERROR connecting");
    return(sockfd);
}
于 2012-06-21T05:44:59.793 に答える
0
strncpy(serverip,"127.0.0.1",strlen("127.0.0.1"));

それは壊れています。最後のパラメータstrncpyは、コピーする文字列の長さではなく、バッファのサイズにする必要があります。文字列の長さよりも大きくない場合(この場合はそうではありません)、悪いことが起こります。strncpyのドキュメントが言うように:

警告: src の最初の n バイトに null バイトがない場合、dest に配置された文字列は null で終了しません。

于 2012-06-21T18:59:49.403 に答える