2011-05-09 12 views
5

Bir sunucuyu ve istemciyi, engelleme olmayan soketleri (fd_sets ve select işlevi) kullanarak programlıyorum ve sunucu bir istemci soketini kapatır veya kapatırsa, istemci çok fazla ileti almaya başlar. çöp bağlantının sonlandırıldı zaman select() ile çalışırken bir yuva okunabilir olacağını uyardı .. çarpana kadar, ama neden sadece düzenli veri veya eğer nasılC Soketler: Soket kapalıyken çöplerden kaçınmak

if(FD_ISSET(socket, &read)) 
{ 
} 

içinde bilebilir bağlantı bitti mi

Çok teşekkür ederim! soket kapalıysa

cevap

6

dosya tanıtıcı setleri alışkanlık ondan okumak için çalışabilir Sadece bu da size. Uzak uç bağlantıyı kapattığında, soket "okunabilir" hale gelecektir. Bir recv()'u denediğinizde, dönüş değeri soketin kapalı olduğunu gösteren 0 olacaktır. Her zaman iade değerlerinizi kontrol edin.

+0

Teşekkür! Yani, soket kapalı olduğunda recv() 0 döndürür? Haha, bu çok açıktı .. teşekkürler çok – Lucas

+0

@Lucas Merhaba! Stackoverflow'a hoş geldiniz. Dave'in cevabından memnunsanız, bunu kabul etmeniz ve belki de onu geri almanız önerilir. Şerefe! – Calvin1602

+0

Teşekkürler! Kayıt oldum ve bazı rep Puanları – Lucas

0

Sen (o fd_set büyüklüğüne bağlı değildir çünkü o da daha esnek!) Yerine poll kullanmak zorunda olacak

struct poll p = {.fd = fd, .events = POLLHUP|POLLRDHUP}; 
İlgili konular