Python [Errno 98] Alamat sudah digunakan

96

Dalam program soket Python saya, terkadang saya perlu menghentikannya dengan Ctrl-C. Ketika saya melakukan ini, itu menutup koneksi menggunakan socket.close().

Namun, ketika saya mencoba membukanya kembali, saya harus menunggu sebentar sebelum saya dapat menyambungkannya lagi. Bagaimana cara menutup soket dengan benar? Atau apakah ini dimaksudkan?

skylerl
sumber

Jawaban:

120

Ya, itu memang dimaksudkan. Di sini Anda dapat membaca penjelasan detailnya . Dimungkinkan untuk mengesampingkan perilaku ini dengan mengatur opsi SO_REUSEADDR pada soket. Sebagai contoh:

sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
Bartosz
sumber
Aneh. Saya sudah menelepon hak ini sebelum mengikat dan kesalahan masih terjadi. Saya pasti membuat kesalahan di tempat lain.
byxor
Tidak masalah, saya mengalami kondisi balapan yang aneh ketika berulang kali mengikat dan mematikan utas terpisah untuk pengujian otomatis saya.
byxor
Anda perlu mengimpor modul yang disebut soket.
Bartosz
32
$ ps -fA | grep python
501 81211 12368   0  10:11PM ttys000    0:03.12  
python -m SimpleHTTPServer

$ kill 81211
ayoub laaziz
sumber
2
Sayangnya, itu tidak selalu berhasil. Ini adalah pemikiran langsung saya ketika saya mengalami masalah ini, tetapi tidak ada proses python untuk dibunuh dalam kasus saya.
Kryten
14

karena Anda mencoba menjalankan layanan di port yang sama yang sudah berjalan.

beberapa kali ini terjadi karena layanan Anda tidak dihentikan dalam tumpukan proses. kamu harus membunuh mereka

tidak perlu menginstal apa pun di sini adalah perintah satu baris untuk mematikan semua proses python yang sedang berjalan.

untuk OS berbasis Linux:

Pesta:

kill -9 $(ps -A | grep python | awk '{print $1}')

Ikan:

kill -9 (ps -A | grep python | awk '{print $1}')
MohitGhodasara
sumber
1
Bekerja untuk saya Terima kasih!
Kode
1
Bekerja untuk saya Terima kasih
pengguna007
7

Solusi sederhana yang berhasil bagi saya adalah menutup Terminal dan memulai ulang.

Siddharth Sethia
sumber
7

Tidak ada yang berhasil untuk saya kecuali menjalankan subproses dengan perintah ini, sebelum memanggil HTTPServer(('', 443), myHandler):

kill -9 $(lsof -ti tcp:443)

Tentu saja ini hanya untuk OS yang mirip linux!

Mirko
sumber
4

Pertama-tama temukan ID proses python menggunakan perintah ini

ps -fA | grep python

Anda akan mendapatkan nomor pid dengan menamai proses python Anda di kolom kedua

Kemudian matikan proses menggunakan perintah ini

kill -9 pid
Abdul Basit
sumber
0

Mendapat kesalahan yang sama:
Langkah-langkah yang diikuti:
1 - digunakan $ ps -fA | grep python
2 - Membunuh semua proses
3 - Terminal tertutup
4 - melepaskan dan meluncurkan aplikasi (mkchromecast).
5 - tidak mendapatkan pesan kesalahan ini.

Punya masalah lain. menindaklanjuti itu.

silvertech048
sumber
0

jalankan perintahnya

fuser -k (port_number_you_are _trying_to_access)/TCP

contoh untuk labu: fuser -k 5000/tcp

Juga, ingat kesalahan ini muncul saat Anda melakukan interput dengan ctrl + z. jadi untuk menghentikan gunakan ctrl + c

Manoj Kumar M
sumber