0

サーバーコードを書くとき、次の行があります:

newsockfd =  accept(sockfd, (struct sockaddr *)&cli_addr, &clilen);

プログラムを実行するとエラーは発生しませんが、プログラムがフリーズするだけで、最初の行に print ステートメントを配置しますmain()(そのため、何かが実行される前に実行する必要があります) が、print ステートメントは実行されません。

このコード行は間違いなく問題です。コメントアウトすると、print ステートメントが機能するからです。

そのような奇妙な行動を引き起こすのは何ですか?
(宿題のコードは掲載禁止なので残念ながら全部は掲載できません)

4

3 に答える 3

1

これが明らかに答えだったので、ここに書きます:printfフォーマット文字列が " \n" で終わらない場合、改行を出力するか、プログラムが終了するまでバッファリングされます。(少し単純化しています。)出力がバッファリングされた後に呼び出しがプログラムを停止したため、呼び出しが正常にaccept機能していても、出力を見ることができませんでした。printf

于 2012-11-14T04:02:47.720 に答える
1

あなたのための他のオプションはfflush()stdoutに関係なく、バッファリングされたものを強制的に「印刷」すること'\n'です:

printf("print this now!");
fflush(stdout);
于 2012-11-14T14:38:01.223 に答える
0

接続待ちです。それが関数の目的ですaccept

于 2012-11-14T03:55:53.657 に答える