iki iş istasyonundan oluşan bir uygulama Unix alan soketleri ile birbirine bağlanmış, (en A ve B diyelim). Çoğu zaman iyi çalışıyor, ancak bazı kullanıcılar şu davranışı rapor:Her iki uç da kapatmadan() veya kilitlenmeden spontan bir EPIPE hatasına neden olabilir?
- A Bu işleri B'ye bir istek gönderir. Bir geç
- B karşılık gelen yazma() çağrısı EPIPE hata verir A'ya bir yanıt gönderir B. Cevabı okumaya başlar, ve sonuç olarak, B yakın olarak() yuva. Ancak, A soketini kapattı(), ne de çöktü. son dosya-gösteren
- A'nın okuma() çağrı döner 0,. A, B'nin bağlantıyı erken kapattığını düşünüyor.
kullanıcılar da bu davranışın varyasyonlarını bildirmişlerdir, örneğin:
- A Bu kısmen çalışır B. bir istek gönderir, ancak tüm istek A'nın yazma gönderilmeden önce() çağrısı EPIPE döndürür ve Sonuç olarak bir() soketi kapatın. Ancak B soketi kapatmadı(), ne de çarptı.
- B kısmi isteği okur ve sonra aniden bir EOF alır.
sorun ben hiç yerel olarak bu davranışı yeniden olamaz. OS X ve Linux'u denedim. Kullanıcılar çoğunlukla OS X ve Linux gibi çeşitli sistemlerde. Zaten denenmiş ve kabul ettik
şeyler:
- Çift close() (close() aynı dosya tanımlayıcı üzerinde iki kez denir) böcek: muhtemelen bu EBADF hatalara neden ederim ama olarak Onları görmedim.
- Maksimum dosya tanıtıcı sınırının artırılması. Bir kullanıcı bunun onun için çalıştığını bildirdi, gerisi bunun olmadığını bildirdi.
başka neler muhtemelen böyle davranışa neden olabilir? Ne A ne B ne de B kapağını erken kapattığımı kesin olarak biliyorum ve her ikisinin de A ve B hatalarını bildirebildiğinden emin olmadıklarını biliyorum. Çekirdek aniden fişi soketten bir sebepten çekmeye karar verdi.
Sunucunun dosya tanıtıcısının EPOLLET bayrağının epoll kuyruğuna eklenmesi yanlış görünüyordu. – user206268
Tam olarak aradığım cevap tam olarak değil, bağlantı kurduğunuz TCP sayfası çok bilgilendirici! Şu anda Archive.org tarafından şu anda var: http://ia700609.us.archive.org/22/items/TheUltimateSo_lingerPageOrWhyIsMyTcpNotReliable/the-ultimate-so_linger-page-or-why-is-my-tcp-not-reli .html – Hongli