Unix Soketi - Yapılar
Unix Soket Programlamada adres ve bağlantı noktası hakkındaki bilgileri ve diğer bilgileri tutmak için çeşitli yapılar kullanılır. Çoğu soket işlevi, argüman olarak bir soket adres yapısına bir işaretçi gerektirir. Bu bölümde tanımlanan yapılar İnternet Protokol Ailesi ile ilgilidir.
Sockaddr
İlk yapı soket bilgilerini tutan sockaddr'dir -
struct sockaddr {
unsigned short sa_family;
char sa_data[14];
};
Bu, soket işlevi çağrılarının çoğunda geçirilecek olan genel bir soket adres yapısıdır. Aşağıdaki tablo üye alanlarının açıklamasını sağlar -
Öznitelik | Değerler | Açıklama |
---|---|---|
sa_family | AF_INET AF_UNIX AF_NS AF_IMPLINK |
Bir adres ailesini temsil eder. İnternet tabanlı uygulamaların çoğunda AF_INET kullanıyoruz. |
sa_data | Protokole özgü Adres | 14 baytlık protokole özgü adresin içeriği, adres tipine göre yorumlanır. İnternet ailesi için, aşağıda tanımlanan sockaddr_in yapısı ile temsil edilen port numarası IP adresini kullanacağız . |
Sockaddr içinde
Soketin elemanlarına başvurmanıza yardımcı olan ikinci yapı aşağıdaki gibidir -
struct sockaddr_in {
short int sin_family;
unsigned short int sin_port;
struct in_addr sin_addr;
unsigned char sin_zero[8];
};
Üye alanlarının açıklaması aşağıdadır -
Öznitelik | Değerler | Açıklama |
---|---|---|
sa_family | AF_INET AF_UNIX AF_NS AF_IMPLINK |
Bir adres ailesini temsil eder. İnternet tabanlı uygulamaların çoğunda AF_INET kullanıyoruz. |
sin_port | Servis Portu | Ağ Bayt Sırasında 16 bitlik bir bağlantı noktası numarası. |
sin_addr | IP adresi | Ağ Bayt Sırasında 32 bitlik bir IP adresi. |
sin_zero | Kullanılmamış | Bu kullanılmadığından bu değeri NULL olarak ayarlarsınız. |
adresinde
Bu yapı sadece yukarıdaki yapıda bir yapı alanı olarak kullanılır ve 32 bit netid / hostid tutar.
struct in_addr {
unsigned long s_addr;
};
Üye alanlarının açıklaması aşağıdadır -
Öznitelik | Değerler | Açıklama |
---|---|---|
s_addr | servis bağlantı noktası | Ağ Bayt Sırasında 32 bitlik bir IP adresi. |
ev sahibi
Bu yapı, ana bilgisayarla ilgili bilgileri tutmak için kullanılır.
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]
};
Üye alanlarının açıklaması aşağıdadır -
Öznitelik | Değerler | Açıklama |
---|---|---|
h_name | ti.com vb. | Ev sahibinin resmi adıdır. Örneğin, tutorialspoint.com, google.com vb. |
h_aliases | TI | Ana bilgisayar adı takma adlarının bir listesini tutar. |
h_addrtype | AF_INET | Adres ailesini içerir ve İnternet tabanlı uygulama durumunda her zaman AF_INET olacaktır. |
h_length | 4 | İnternet Adresi için 4 olan IP adresinin uzunluğunu tutar. |
h_addr_list | in_addr | İnternet adresleri için, h_addr_list [0], h_addr_list [1] ve benzeri işaretçiler dizisi in_addr yapısının işaretleridir. |
NOTE - h_addr, geriye dönük uyumluluğu korumak için h_addr_list [0] olarak tanımlanır.
hizmetçi
Bu özel yapı, hizmet ve ilgili bağlantı noktaları ile ilgili bilgileri tutmak için kullanılır.
struct servent {
char *s_name;
char **s_aliases;
int s_port;
char *s_proto;
};
Üye alanlarının açıklaması aşağıdadır -
Öznitelik | Değerler | Açıklama |
---|---|---|
adı | http | Bu, hizmetin resmi adıdır. Örneğin, SMTP, FTP POP3 vb. |
s_aliases | ALIAS | Hizmet takma adlarının listesini tutar. Çoğu zaman bu NULL olarak ayarlanacaktır. |
spor | 80 | İlişkili bağlantı noktası numarasına sahip olacaktır. Örneğin, HTTP için bu 80 olacaktır. |
s_proto | TCP UDP |
Kullanılan protokole ayarlanmıştır. İnternet hizmetleri, TCP veya UDP kullanılarak sağlanır. |
Soket Yapılarıyla İlgili İpuçları
Soket adres yapıları, her ağ programının ayrılmaz bir parçasıdır. Onları tahsis ediyoruz, dolduruyoruz ve onlara çeşitli soket işlevlerine işaretçiler gönderiyoruz. Bazen bu yapılardan birine bir soket işlevine bir işaretçi aktarırız ve bu, içeriği doldurur.
Bu yapıları her zaman referans olarak iletiriz (yani, yapının kendisine değil, yapıya bir işaretçi iletiriz) ve her zaman yapının boyutunu başka bir argüman olarak iletiriz.
Bir soket işlevi bir yapıyı doldurduğunda, uzunluk da referans olarak iletilir, böylece değeri işlev tarafından güncellenebilir. Bunlara değer-sonuç argümanları diyoruz.
Her zaman, bzero () işlevleri için memset () kullanarak yapı değişkenlerini NULL (yani '\ 0') olarak ayarlayın, aksi takdirde yapınızda beklenmedik önemsiz değerler alabilir.