GNU/Linux >> Belajar Linux >  >> Linux

Apa perbedaan antara AF_INET dan PF_INET dalam pemrograman soket?

Faktanya, AF_ dan PF_ adalah hal yang sama. Ada beberapa kata di Wikipedia yang akan menghilangkan kebingungan Anda

Konsep desain asli antarmuka soket membedakan antara tipe protokol (keluarga) dan tipe alamat khusus yang dapat digunakan masing-masing. Dibayangkan bahwa keluarga protokol mungkin memiliki beberapa tipe alamat. Jenis alamat ditentukan oleh konstanta simbolik tambahan, menggunakan awalan AF_ alih-alih PF_. Pengidentifikasi AF_ dimaksudkan untuk semua struktur data yang secara khusus menangani jenis alamat dan bukan keluarga protokol. Namun, konsep pemisahan protokol dan tipe alamat ini belum menemukan dukungan implementasi dan konstanta AF_ hanya ditentukan oleh pengidentifikasi protokol yang sesuai, memberikan perbedaan antara konstanta AF_ versus PF_ argumen teknis tanpa konsekuensi praktis yang signifikan. Memang, ada banyak kebingungan dalam penggunaan yang tepat dari kedua bentuk tersebut.


Saya menemukan di kode sumber kernel Linux bahwa PF_INET dan AF_INET adalah sama. Kode berikut berasal dari file include/linux/socket.h , baris 204 dari pohon kernel Linux 3.2.21.

/* Protocol families, same as address families. */
...
#define PF_INET     AF_INET

Panduan pemrograman jaringan Beej yang terkenal memberikan penjelasan yang bagus:

Dalam beberapa dokumentasi, Anda akan melihat penyebutan "PF_INET" yang mistis. Ini adalah binatang eterial aneh yang jarang terlihat di alam, tetapi saya juga akan menjelaskannya sedikit di sini. Dahulu kala, diperkirakan bahwa mungkin keluarga alamat (kepanjangan dari "AF" di "AF_INET") mungkin mendukung beberapa protokol yang direferensikan oleh keluarga protokol mereka (kependekan dari "PF" di "PF_INET").
Itu tidak terjadi. Baiklah. Jadi hal yang benar untuk dilakukan adalah menggunakan AF_INET di struct sockaddr_in Anda dan PF_INET dalam panggilan Anda ke socket(). Namun secara praktis, Anda dapat menggunakan AF_INET di mana saja. Dan, karena itulah yang dilakukan W. Richard Stevens dalam bukunya, itulah yang akan saya lakukan di sini.


  • AF =Alamat Keluarga
  • PF =Keluarga Protokol

Artinya, AF_INET mengacu pada alamat dari internet, khususnya alamat IP. PF_INET mengacu pada apa pun dalam protokol, biasanya soket/port.

Pertimbangkan untuk membaca halaman manual untuk socket(2) dan bind(2). Untuk sin_addr lapangan, lakukan saja seperti berikut untuk menyetelnya:

struct sockaddr_in addr;
inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr); 

Linux
  1. Apa perbedaan antara Redhat dan centOS?

  2. Apa perbedaan antara insmod dan modprobe

  3. Apa perbedaan antara mutex dan bagian kritis?

  1. Apa perbedaan antara strtok_r dan strtok_s di C?

  2. Apa perbedaan antara adduser dan useradd?

  3. Apa perbedaan antara ls dan l?

  1. Apa perbedaan antara InnoDB dan MyISAM?

  2. Apa perbedaan antara $(CC) dan $CC?

  3. Apa perbedaan antara rute dan rute ip?