Kami melayani port di localhost dan ingin memeriksa proses lain jika port tersedia. Karena ada bug dalam kode kami, sebenarnya ia mencoba untuk terhubung ke IP 0.0.0.0:<port>
, dan untuk beberapa alasan ia berhasil - seperti yang dibuktikan oleh strace:
[...]
connect(3, {sa_family=AF_INET, sin_port=htons(10002), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
[...]
Apa artinya? Mengapa ini berhasil?
networking
tcp
strace
erikbwork
sumber
sumber
Jawaban:
0.0.0.0 sebagai alamat target merujuk berbagai host yang tidak dapat dialihkan atau ke "host ini" . Dalam praktiknya menghubungkan ke 0.0.0.0 sama dengan menghubungkan ke localhost. (Sebenarnya, ini tidak valid sebagai alamat tujuan, hanya sebagai alamat sumber, tetapi praktik tidak cocok dengan teori.)
Ketika mengikat, "host ini" diperluas ke "alamat apa pun di host ini" - jadi aplikasi biasanya menerima koneksi dengan mengikat ke 0.0.0.0, yang berarti mereka akan menerima paket yang ditujukan ke alamat IPv4 pada sistem.
sumber