2017-05-29 78 views
-1

我測試的東西出來阻止我做了一個非阻塞套接字,但「與fgets」毀了我的計劃。我如何防止fgets阻止我的while循環顯示在下面? 解決此問題的代碼將不勝感激。非阻塞的Socket通過與fgets

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 inut,你想送什麼? – nos

+0

我想要一個輸入,但不阻止即將發生的recv消息。想象一下,像客戶端和服務器之間 – betelgeusee

回答

-1

它不建議,但如果你願意,你可以這樣做:

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

而且你有無阻塞標準輸入。

提示:更好地利用選擇或等待準備文件描述符調查。