Soket Unix - Struktur
Berbagai struktur digunakan dalam Unix Socket Programming untuk menyimpan informasi tentang alamat dan port, dan informasi lainnya. Sebagian besar fungsi soket memerlukan penunjuk ke struktur alamat soket sebagai argumen. Struktur yang didefinisikan dalam bab ini terkait dengan Keluarga Protokol Internet.
sockaddr
Struktur pertama adalah sockaddr yang menyimpan informasi soket -
struct sockaddr {
unsigned short sa_family;
char sa_data[14];
};
Ini adalah struktur alamat soket umum, yang akan diteruskan di sebagian besar panggilan fungsi soket. Tabel berikut memberikan deskripsi bidang anggota -
Atribut | Nilai | Deskripsi |
---|---|---|
sa_family | AF_INET AF_UNIX AF_NS AF_IMPLINK |
Ini mewakili keluarga alamat. Di sebagian besar aplikasi berbasis Internet, kami menggunakan AF_INET. |
sa_data | Alamat khusus protokol | Isi dari 14 byte alamat khusus protokol diinterpretasikan menurut jenis alamat. Untuk keluarga Internet, kami akan menggunakan alamat IP nomor port, yang diwakili oleh struktur sockaddr_in yang ditentukan di bawah. |
sockaddr in
Struktur kedua yang membantu Anda mengacu pada elemen soket adalah sebagai berikut -
struct sockaddr_in {
short int sin_family;
unsigned short int sin_port;
struct in_addr sin_addr;
unsigned char sin_zero[8];
};
Berikut adalah deskripsi bidang anggota -
Atribut | Nilai | Deskripsi |
---|---|---|
sa_family | AF_INET AF_UNIX AF_NS AF_IMPLINK |
Ini mewakili keluarga alamat. Di sebagian besar aplikasi berbasis Internet, kami menggunakan AF_INET. |
sin_port | Service Port | Nomor port 16-bit di Network Byte Order. |
sin_addr | Alamat IP | Alamat IP 32-bit di Network Byte Order. |
sin_zero | Tidak digunakan | Anda baru saja menyetel nilai ini ke NULL karena ini tidak digunakan. |
di addr
Struktur ini hanya digunakan pada struktur di atas sebagai bidang struktur dan menampung 32 bit netid / hostid.
struct in_addr {
unsigned long s_addr;
};
Berikut adalah deskripsi bidang anggota -
Atribut | Nilai | Deskripsi |
---|---|---|
s_addr | pelabuhan layanan | Alamat IP 32-bit di Network Byte Order. |
tuan rumah
Struktur ini digunakan untuk menyimpan informasi yang berhubungan dengan host.
struct hostent {
char *h_name;
char **h_aliases;
int h_addrtype;
int h_length;
char **h_addr_list
#define h_addr h_addr_list[0]
};
Berikut adalah deskripsi bidang anggota -
Atribut | Nilai | Deskripsi |
---|---|---|
h_name | ti.com dll. | Itu adalah nama resmi tuan rumah. Misalnya, tutorialspoint.com, google.com, dll. |
h_aliases | TI | Ini memegang daftar alias nama host. |
h_addrtype | AF_INET | Ini berisi keluarga alamat dan dalam kasus aplikasi berbasis Internet, itu akan selalu AF_INET. |
h_length | 4 | Ini memegang panjang alamat IP, yaitu 4 untuk Alamat Internet. |
h_addr_list | in_addr | Untuk alamat Internet, array pointer h_addr_list [0], h_addr_list [1], dan seterusnya, adalah poin ke struktur in_addr. |
NOTE - h_addr didefinisikan sebagai h_addr_list [0] untuk menjaga kompatibilitas ke belakang.
hamba
Struktur khusus ini digunakan untuk menyimpan informasi yang terkait dengan layanan dan port terkait.
struct servent {
char *s_name;
char **s_aliases;
int s_port;
char *s_proto;
};
Berikut adalah deskripsi bidang anggota -
Atribut | Nilai | Deskripsi |
---|---|---|
nama S | http | Ini adalah nama resmi layanan tersebut. Misalnya SMTP, FTP POP3, dll. |
s_aliases | ALIAS | Ini memegang daftar alias layanan. Sebagian besar waktu ini akan disetel ke NULL. |
olahraga | 80 | Ini akan memiliki nomor port terkait. Misalnya, untuk HTTP, nilainya menjadi 80. |
s_proto | TCP UDP |
Ini diatur ke protokol yang digunakan. Layanan Internet disediakan menggunakan TCP atau UDP. |
Tip tentang Struktur Socket
Struktur alamat soket merupakan bagian integral dari setiap program jaringan. Kami mengalokasikannya, mengisinya, dan meneruskan pointer ke berbagai fungsi soket. Kadang-kadang kita melewatkan pointer ke salah satu struktur ini ke fungsi soket dan mengisi isinya.
Kami selalu melewatkan struktur ini dengan referensi (yaitu, kami mengirimkan pointer ke struktur, bukan struktur itu sendiri), dan kami selalu meneruskan ukuran struktur sebagai argumen lain.
Ketika fungsi soket mengisi suatu struktur, panjangnya juga diteruskan oleh referensi, sehingga nilainya dapat diperbarui oleh fungsi tersebut. Kami menyebut argumen hasil nilai ini.
Selalu, setel variabel struktur ke NULL (yaitu, '\ 0') dengan menggunakan fungsi memset () untuk bzero (), jika tidak maka akan mendapatkan nilai sampah yang tidak diharapkan dalam struktur Anda.