0

2 つのスレッドを持つサーバー プログラムを作成しました。1 つのスレッドがクライアントからデータを受信し、もう 1 つのスレッドがクライアントにデータを送信します。どちらのスレッドも、データを送受信するための無限ループで構成されています。

私の問題は、サーバーが接続を受け入れ、データを送信するためのスレッドを作成することですが、セグメンテーション違反が発生し、サーバーが終了します。なんで?

送信スレッドのコードは次のとおりです。

void *send_data(void *num)
{
    int *sock_s=(int *) num;
    int sock=*sock_s;
    char msg[50];
    while(1)
    {
        fgets(msg,50,stdin);
        printf("sending data");
        if(strcmp(msg,"exit")==0)
        {
            break;
        }
        send(sock,msg,sizeof(msg),0);
    }
    send(sock,msg,strlen(msg),0);
}

上記のスレッドは次によって作成されます。

status_s=pthread_create(&thread_s,NULL,send_data,(void *)client_sock);
4

1 に答える 1

3

クライアントソケットへのポインタではなく、クライアントソケットを渡しています。num をポインターとして扱っているため、3 または 4 または 5 のような値 (ソケット ID、ファイル記述子テーブルへのインデックス) である可能性が高いメモリ アドレスから "読み取り" を試みています。メモリ違反。

そのはず...

void *send_data( void *num )
{
    int sock = (int)num;
    ...
于 2013-04-08T12:20:53.860 に答える