2011-08-09 6 views
4

私は新しいクライアントが接続するたびに新しいスレッドを生成するCで書かれたサーバを持っています。私のサーバーをテストするために、私は500のクライアントをエミュレートするスクリプトを書いています。サーバは百のクライアントの最初のカップルを処理し、終わりに向かって、私はValgrindのから次のエラーを取得:FBServer.cにライン82でValgrindでVgTs_WaitSysのエラーは何を意味しますか?

Thread 456: status = VgTs_WaitSys 
==4182== at 0x4E383EC: recv (recv.c:34) 
==4182== by 0x4017F1: process_data (socket2.h:45) 
==4182== by 0x40195E: thread (FBServer.c:82) 
==4182== by 0x4E30A03: start_thread (pthread_create.c:300) 
==4182== by 0x532DD4C: clone (clone.S:112) 

Thread 457: status = VgTs_WaitSys 
==4182== at 0x4E383EC: recv (recv.c:34) 
==4182== by 0x4017F1: process_data (socket2.h:45) 
==4182== by 0x40195E: thread (FBServer.c:82) 
==4182== by 0x4E30A03: start_thread (pthread_create.c:300) 
==4182== by 0x532DD4C: clone (clone.S:112) 

... 

Thread 499: status = VgTs_WaitSys 
==4182== at 0x4E383EC: recv (recv.c:34) 
==4182== by 0x4017F1: process_data (socket2.h:45) 
==4182== by 0x40195E: thread (FBServer.c:82) 
==4182== by 0x4E30A03: start_thread (pthread_create.c:300) 
==4182== by 0x532DD4C: clone (clone.S:112) 

を、スレッドがクライアントからデータを受信process_dataという関数を呼び出します。関数process_dataを以下に示します。

void process_data(int clientSock) 
{ 
    size_t n; 
    char jstring[MAX_LEN + 1]; 
    int bytes_received_so_far = 0; 
    int bytes_count; 
    char *buf = NULL; 

    while(bytes_count = recv(clientSock, jstring, MAX_LEN, 0)) 
    { 
     if(bytes_count <= 0) 
     { 
      close(clientSock); 
      pthread_exit(NULL); 
     } 

     printf("Bytes received = %d\n", bytes_count);       
     jstring[bytes_count] = '\0'; 

     ... 
     ... 
    } 
} 

誰かがエラーメッセージの解釈に私を助けることができます。

+0

これはvalgrindが提供する最初のエラー(または出力)ですか? – nos

+0

あなたはどのプラットフォームにいますか?開いているファイル記述子の数に制限がある場合は、プラットフォームに依存します。たとえば、私のLinuxのボックスでは、一度に1024のファイルと128の半分の接続を持つことができます。 – zdav

答えて

1

あなたはどのバージョンのValgrindを使用していますか?私はソースで見つけることができる唯一のコメントについて

た:

VgTs_WaitSys, /* waiting for a syscall to complete */

だから、プログラムだけでシステムコール(あなたのケースではrecv)にブロックしていることを示すために表示されます。私は確信していませんが、これはまったくエラーではないかもしれません、Valgrindによって追い出されたちょっとした情報です。

+0

ブロックするrecv()の直後に表示されるメッセージと一貫していますか。この場合はエラーではありません。 – Torp

関連する問題