2016-05-07 7 views
-3

私は、単純なソケットプログラムをテストしようとすると奇妙な問題に遭遇しています。ここで "accept"関数を呼び出すと、プログラムがハングアップしているように見えますが、 "SENPAI PLS"は出力されますが、 "SADDASSDA"は出力されません。Linuxソケットシステムコール "accept"は返されませんか?

私は昨夜私のコードのこの部分を過ぎていました。コンテキストでは、これは大規模なサーバー上で実行されており、おそらく私と同じプロジェクトを実行しようとしている他の学生がかなりいるため、そのうちのいくつかはサーバープログラムを実行していることを確信しています。

サービスがビジー状態であるか完全な状態になっていても、決して完了しない可能性がありますか?接続が受け入れられるまで(リスニングソケットが非ブロックモードである場合を除く)

 do{ 
     printf("SENPAI PLS\n"); 
     clientFD=accept(serverFD, (struct sockaddr *) &clientAddress, &clientAddressSize); 
     printf("SADDASSDA\n"); 
     if(clientFD==-1){ 
      sleep(1); 
     } 
    }while (clientFD==-1); 
+2

私はあなたにそれに接続しようとしているクライアントプログラムがあると思います。 'accept'は接続が入るまでブロックします。あなたのクライアントでは何が起こっていますか? –

+0

accept関数自体は、接続が試行されるまでループしていますか? – ryan25251

+1

'accept'は接続が受け入れられるまで(リスニングソケットが非ブロックモードでない限り)戻りません。 –

答えて

1

acceptは戻りません。

関連する問題