Semua orang benar. Namun, jika Anda juga sibuk menguji kode milik Anda aplikasi mungkin masih "memiliki" soket jika mulai dan berhenti relatif cepat. Coba SO_REUSEADDR sebagai opsi soket:
Apa sebenarnya yang dilakukan SO_REUSEADDR?
Opsi soket ini memberi tahu kernel bahwa meskipun port ini sibuk (dalam status TIME_WAIT), lanjutkan dan tetap gunakan kembali. Jika sedang sibuk, tetapi dengan status lain, Anda masih akan mendapatkan alamat yang sudah dalam kesalahan penggunaan. Ini berguna jika server Anda telah dimatikan, dan kemudian langsung dihidupkan ulang saat soket masih aktif di portanya. Anda harus menyadari bahwa jika ada data yang tidak terduga masuk, ini dapat membingungkan server Anda, tetapi meskipun hal ini memungkinkan, kemungkinan kecil.
Telah ditunjukkan bahwa "Soket adalah 5 tuple (proto, localaddr, local port, remote addr, remote port). SO_REUSEADDR hanya mengatakan bahwa Anda dapat menggunakan kembali alamat lokal. 5 tuple masih harus unik!" oleh Michael Hunter ([email protected]). Ini benar, dan inilah mengapa sangat tidak mungkin data yang tidak terduga akan terlihat oleh server Anda. Bahayanya adalah bahwa 5 tuple seperti itu masih mengambang di internet, dan saat tuple memantul, koneksi baru dari klien yang sama, pada sistem yang sama, kebetulan mendapatkan port jarak jauh yang sama. Hal ini dijelaskan oleh Richard Stevens dalam ``2.7 Pleaseexplain the TIME_WAIT state.''.
Anda memiliki proses yang sudah menggunakan port tersebut. netstat -tulpn
akan memungkinkan seseorang untuk menemukan ID proses yang menggunakan port tertentu.