TCP sunucusunda "address already in use" hatası

turkuazaga

Üye
Katılım
23 Aralık 2018
Mesajlar
58
Berkeley soketlerini anlatan bir kitaptaki basit TCP sunucu örneğini yazdım ve sunucu çalışıyor. TELNET ile bağlanıyorum ve benim yazdığım mesajın aynısını sunucu bana geri gönderiyor. Ama eğer sunucuda bir değişiklik yapıp derledikten sonra sunucuyu tekrar başlatırsam "address alredy in use" gibi bir hata alıyorum. Ama her zaman da olmuyor. Tam olarak hangi durumda olduğunu da anlayamadım. Acaba bu hatanın sebebi nedir?
 
Muhtemelen sunucunun dinleme soketi, sunucuyu sonlandırdığında TIME_WAIT modunda kalıyor ve o yüzden yeni açılan soketi aynı dinleme portuna bağlayamıyorsun. Eğer sunucuyu sonlandırdıktan sonra bir süre beklersen, önceki soket için TIME_WAIT süresi sona erer ve dinleme portu boşa çıkar, ve sunucuyu tekrar başlattığında belirttiğin hatayı almazsın. Ama sunucuyu sonlandırıp hemen tekrar başlatırsan o hatayı alırsın.

Bu hatayı almamak için, TCP sunucusu için oluşturduğun "dinleme" soketi için SO_REUSEADDR opsiyonunu set etmen gerekir. Bunun için de setsockopt fonksiyonunu kullan. Detayları sen araştır ve uygula. Olmazsa da neyin olmadığını yaz ona göre yardımcı olmaya çalışayım.
 
setsockopt ile opsiyonu set etmek çok uğraştırdı ama sonunda set ettim. Ama gene de aynı hatayı alıyorum. opsiyonun set edildiğinden eminim çünkü getsockopt fonksiyonu ile set edilen değeri geri okudum. Başka problem ne olabilir? yardım ederseniz sevinirim...
 
Son düzenleme:
Şimdi bir dakika ... TCP sunucularda konsept olarak iki tane soket vardır:

Soketin birisi, sunucunun yeni client'ları beklediği "dinleme" soketidir.

Diğer soket ise, bir client ile bağlantı kurulduktan sonra oluşturulan sokettir. Yani "accept" fonksiyonunun sana verdiği soket.

Senin yapman gereken, "dinleme" soketi için SO_REUSEADDR opsiyonunu set etmek. Sen herhalde client socket için yaptın ve orada da bu opsiyonun hiçbir faydası olmaz.
 
Teşekkürler, dimleme soketi için setsockopt yaptım ve sorun düzeldi! Sunucuya yaptığım her değişiklik sonrası 5 dakika beklemek çok sinir bozucu idi.
 

Çevrimiçi personel

Forum istatistikleri

Konular
8,441
Mesajlar
138,451
Üyeler
3,342
Son üye
fatih46

Son kaynaklar

Son profil mesajları

mechanic ayhanarican mechanic wrote on ayhanarican's profile.
https://www.allmystery.de almanca biliyorsan burada araştır. Yapay zekada çeviriyor gerçi.
Almanların matematik bilgisi daha iyi oluyor.
“Kendi yolunu çizen kişi, kimsenin izinden gitmez.” – Nietzsche
Kim İslâm’da güzel bir çığır açarsa (güzel bir alışkanlık başlatırsa), onun sevabı ve kendisinden sonra ona uyanların sevapları, onların sevaplarından hiçbir şey eksilmeksizin ona da yazılır.
erdemtr55 taydin erdemtr55 wrote on taydin's profile.
Merhaba Taydin bey,
Gruba spms serisi yapıcak mısınız?
ben 3 sargılı toroid ile 2 adet flyback sürücek bir devre yapmayı düşünüyorum.size soracak sorularım vardı?
Mutluluğun resmi illa güzel çizilmiş tablo olmak zorunda değil.Bazen basit bir çizgi,doğru bir renk,yada küçük bir detay
Back
Top