Buradaki çarpışmayı önlemek için en iyi uygulama nedir?
Sigpipes'ı herkese göre devre dışı bırakın veya hatayı yakalayıp yok sayın.
Çizginin diğer tarafının hala okunup okunmadığını kontrol etmenin bir yolu var mı?
Evet, select () öğesini kullanın.
select () burada her zaman soketin yazılabilir olduğunu söylediği için çalışmıyor.
Okuma bitleri üzerinde seçim yapmanız gerekir . Muhtemelen yazma bitlerini göz ardı edebilirsiniz .
Uzak uç dosya tanıtıcısını kapattığında, Select seçeneği okumaya hazır verilerin bulunduğunu bildirir. Gittiğinizde ve okuduğunuzda, 0 bayt geri alırsınız, bu da işletim sisteminin size dosya tanıtıcısının kapatıldığını söyler.
Yazma bitlerini göz ardı edemediğiniz tek zaman, büyük hacimler gönderiyorsanız ve diğer ucun yeniden bloke olma riski vardır ve bu da arabelleklerinizin dolmasına neden olabilir. Bu durumda, dosya tanıtıcısına yazmaya çalışmak programınızın / iş parçacığınızın engellenmesine veya başarısız olmasına neden olabilir. Seçimi yazmadan önce test etmek sizi bundan koruyacaktır, ancak diğer ucun sağlıklı olduğunu veya verilerinizin geleceğini garanti etmez.
Close () öğesinden ve yazarken bir sigpipe sahip olabileceğinizi unutmayın.
Kapat, arabelleğe alınan verileri temizler. Diğer uç zaten kapatılmışsa, kapatma başarısız olur ve bir sigpipe alırsınız.
Arabelleklenmiş TCPIP kullanıyorsanız, başarılı bir yazma işlemi verilerinizin gönderilmek üzere kuyruğa alındığı anlamına gelir, bu gönderildiği anlamına gelmez. Başarılı bir şekilde kapatmayı kapatana kadar, verilerinizin gönderildiğini bilmiyorsunuz.
Sigpipe size bir şeyin yanlış gittiğini söyler, size neyi ya da bu konuda ne yapmanız gerektiğini söylemez.