2009-03-03 27 views
6

Kısa bir süre önce python öğreniyorum ve python'un socket kitaplığını kullanarak ağ iletişimi ile oynamaya başladım. Komutum bağlantıyı kesmeden sonlandırıldığında son zamanlara kadar her şey iyi gidiyor.Python bağlantı noktası bağlama

File "./alert_server.py", line 9, in <module> 
    s.bind((HOST, PORT)) 
File "<string>", line 1, in bind 
socket.error: (98, 'Address already in use') 

yüzden hala bir şey python komut dosyası çalışmıyor olsa bile, limana binded gibi görünüyor (ve $px aux kullanarak bu doğrulandıktan nedir: Senaryoyu ran bir dahaki sefere ben aldım. garip bir dakika sonra, komut dosyasını aynı bağlantı noktasında tekrar çalıştırabilirim ve bu da iyi olacak. Bu, gelecekte ne zaman olacak diye bir bağlantı noktasını engellemek/engellemek için herhangi bir yol var mı?

cevap

14

Ne istiyorsunuz? yapmak için bind, hemen önce:

Kullandığınız davranışı görmenizin sebebi, işletim sisteminin son bağlantı sona erdikten sonra belirli bir süre için o bağlantı noktasını saklı tutmasıdır. Bu, uygulamanın sona ermesinden sonra gelebilecek tüm diğer paketlerin düzgün bir şekilde atılabilmesidir.

SO_REUSEADDR soket seçeneğini ayarlayarak, OS'ye ne yaptığınızı bildiğinizi ve yine de aynı bağlantı noktasına bağlanmak istediğinizi söylüyorsunuz.

+1

Ayrıca, yuvada shutdown() ve close() öğesini de aramak isteyebilirsiniz. –

İlgili konular