Saya juga mengalami masalah yang sama. Itu karena Anda menutup koneksi Anda ke soket, tetapi bukan soket itu sendiri. Soket dapat memasuki status TIME_WAIT (untuk memastikan semua data telah dikirim, TCP menjamin pengiriman jika memungkinkan) dan memerlukan waktu hingga 4 menit untuk dirilis.
atau, untuk penjelasan teknis/SANGAT mendetail, periksa tautan ini
Ini tentu mengganggu, tapi itu bukan bug. Lihat komentar dari @Vereb pada jawaban di bawah ini tentang penggunaan SO_REUSEADDR
.
Coba netstat seperti ini:netstat -ntp
, tanpa -l
. Ini akan menunjukkan koneksi tcp di TIME_WAIT
negara bagian.
Saya tahu sudah lama sejak pertanyaan diajukan tetapi saya dapat menemukan solusinya:
int sockfd;
int option = 1;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option));
Ini mengatur soket dapat segera digunakan kembali.
Saya minta maaf jika ini "salah". Saya tidak terlalu berpengalaman dengan soket