我實現了一個客戶端 - 服務器程序,允許它們傳輸文件。服務器正在使用select()來檢查套接字的更改。 除了這一個,每個測試都很好: - 當服務器發送一個巨大的文件到客戶端(尚未完成)時,客戶端點擊「Ctrl-C」殺死客戶端程序,然後服務器也被殺死:(C文件傳輸問題
的片段:
fprintf(stderr,"Reading done, sending ...\n");
if(send(sockClient, sendBuf, chunk_length, 0) < 0)
{
printf("Failed to send through socket %d \n", sockClient);
return -1;
}
fprintf(stderr,"Sending done\n");
當客戶端被殺害,服務器終端顯示:?!
user$./server
Reading done, sending ...
Sending done
Reading done, sending ...
Sending done
Reading done, sending ...
Sending done
Reading done, sending ...
user$
什麼地方錯了, 謝謝您的回答
正確的,你所描述的「跳出」是你的進程從系統接收SIGPIPE的地方。 – 2009-11-05 03:35:48
您可以控制是否使用MSG_NOSIGNAL代替send()中的0。您仍然收到錯誤EPIPE(儘管如果您沒有安裝SIGPIPE處理程序,則send()不會返回)。 – 2009-11-05 05:33:06