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
5,660
Mesajlar
97,359
Üyeler
2,438
Son üye
İbrahimSönmez

Son kaynaklar

Son profil mesajları

cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Kesici/Spindle hızı hesaplamak için SpreadSheet UDF'leri kullanın, hesap makinesi çok eski kalan bir yöntem :)
Dr. Bülent Başaran,
Elektrik ve Elektronik Mühendisi
Yonga Tasarım Özdevinimcisi
Üç güzel "çocuk" babası
Ortahisar/Ürgüp/Konya/Ankara/Pittsburgh/San Francisco/Atlanta/Alaçatı/Taşucu...

Back
Top