2015-01-13 72 views
-1

n的值來到9,sockfd = 3,並且因爲它調用了讀取功能,所以它不是來自讀取功能。印刷讀取開始行後,它停在那裏只有:閱讀功能沒有返回任何值

while(1) 
{ 
     if (n < 0) 
      { 
       printf("ERROR writing to socket");    
      } 
     else if(n == 0) 
      { 
       printf("Nothing"); 

      } 
      printf(" read start n=%d\n ,sockfd = %d\n",n,sockfd); 
      n = read(sockfd,buffer,1024); 

     if (n < 0) 
      { error("ERROR reading from socket"); 
      } 
      printf("Reply= %s",buffer); 
      write_buf_to_file("/root/abc_regr/receive.txt",buffer); 
} 
return; 
+0

你確定有數據在等嗎?嘗試使用'recv()'而不是'read()'並傳遞'flags = MSG_DONTWAIT'來獲得非阻塞接收。然後,如果沒有可供讀取的數據,它將立即返回。 –

+0

這是令人毛骨悚然的代碼格式。在寫入任何內容之前(在代碼之前的'n'測試爲'read',什麼時候是'read'',而不是'write',是否設置'n'),檢測寫入錯誤似乎也很奇怪。 。 –

+0

「n的值爲9,sockfd = 3,當它調用讀取函數時,它不會從讀取函數」什麼? – Lundin

回答

1

read()在默認情況下阻塞調用,因此它會等待,直到它得到的數據。如果你想要非阻塞函數讀取this問題的答案。