2017-05-29 12 views
-1

私は物事をテストしていますが、非ブロック化ソケットを作成しましたが、 "fgets"が私の計画を台無しにしました。どうすればfgetsが私のwhileループをブロックするのを防ぐことができますか? これを解決するコードは非常に高く評価されます。非ブロック化ソケットがブロックされています

fcntl(clientSocket, F_SETFL, O_NONBLOCK); 

while(1){ 

    fgets(buffer,sizeof(buffer),stdin); 
    send(clientSocket,buffer,sizeof(buffer),0); 

    recv(clientSocket,buffer,sizeof(buffer),0); 
    printf("%s",buffer); 

} 
+4

'fgets()'は 'stdin'をブロックしています。これはあなたのノンブロッキングソケットとはまったく関係ありません。 'select'と' poll'/'epoll'を見てください。 –

+0

fgets()がブロックされなかった場合、次に何をするつもりですか?つまり、fgetsの不具合がなければ、何を送信しますか? – nos

+0

私は入力が必要ですが、recvからの今後のメッセージをブロックしません。クライアントとサーバーの間のチャットサービスのようなものを想像してください – betelgeusee

答えて

-1

これはお勧めしませんが、あなたがしたい場合は、単に行うことができます。

if (fcntl(0, F_SETFL, O_NONBLOCK) == -1) { 
    perror("fcntl"); 
    exit(EXIT_FAILURE); 
} 

をそして、あなたは非ブロッキングSTDINを持っています。

ヒント:待機ファイルディスクリプタの選択またはポーリングを使用することをお勧めします。

関連する問題