2014-10-06 60 views
0

我有以下代碼,並且在發送了幾百個字節後寫入套接字寫入套接字。我已經使用「rb」標誌讀取fread字節。TCP套接字在循環中途停止寫入

char filebuff[size_aux]; 
i=0; 
int negative=0; 
int positive=0; 
int zero=0; 
while(i<size_aux) //size_aux is 79067 
{ 

    bytesSent = write(clnt_fd, &filebuff[i], 1); 
    if(bytesSent>0) positive++; 
    if(bytesSent<0) negative++; 
    if(bytesSent==0) zero++; 

    i++; 

} 

它印什麼是這樣的:

Positive: 868 
Negative: 78199 
Zero: 0 

我已經檢查其發送的連續868直,然後停止發送,從而爲-1寫轉值。發送的字節數是隨機的,有時像868個其他時間(如600),但與文件的實際大小相比較小。 在此之前,我不得不插入以下代碼:

signal (SIGPIPE, SIG_IGN); 

因爲在while循環的中間,將退出我的程序到終端。

+0

套接字是否非阻塞? – usr 2014-10-06 17:12:32

+0

閱讀寫文檔。看看錯誤代碼。現在修復您的代碼以詳細查看這些錯誤代碼,或者至少打印出您的代碼正在獲取的錯誤。 – 2014-10-06 17:12:49

+0

errno給我的是0,所以我不能做太多。我如何知道套接字是否是非阻塞的,我無法訪問服務器代碼。 – Elsendion 2014-10-06 17:16:59

回答

0

當您收到SIGPIPE信號或來自write()返回的EPIPE錯誤時,表示套接字的讀取結束已經停止偵聽。

您唯一的迴應是關閉套接字。你不能讓另一方接收更多的字節並且連接已經死亡。