Bilinen servislerin kayıtlarını tutan veritabanı genellikle /etc/services dosyası veya bir isim sunucusundaki eşdeğeridir. Sizler bu araçları, ki netdb.h içinde tanımlıdır, servis veritabanına erişim için kullanabilirsiniz.
struct servent
veri türü
Bu veri türü servis veritabanındaki girdilerle ilgili bilgiyi tutar. Aşağıdaki üyelere sahiptir:
char *s_name
Bu servisin "resmi" adıdır.
char **s_aliases
Bunlar servisin diğer adlarıdır ve dizgelerden oluşan bir dizi olarak gösterilir. Bir boş gösterici diziyi sonlandırır.
int s_port
Bu servisin port numarasıdır. Port numaraları ağ bayt sırasında verilmiştir; bilgi için Bayt Sırası Dönüşümü bölümüne bakınız.
Belirli bir servis hakkında bilgi almak için, getservbyname veya getservbyport işlevlerini kullanınız. Bilgi durağan olarak ayrılmış bir yapı içinde döndürülür; çağrılar sırasında, kaydetme ihtiyacı duyarsanız bilgiyi kopyalamanız gerekir.
struct servent *getservbyname
(const char *isim,
const char *protokol)
işlev
getservbyname işlevi isim ile isimlendirilmiş protokol protokolünü kullanan servis hakkında bilgi döndürür. Eğer böyle bir servis bulamazsa boş gösterici döndürür.
Bu işlev sunucular için olduğu kadar istemciler için de kullanışlıdır; sunucular hangi portu dinlemeleri gerektiğini bu işlevle belirlerler.
struct servent *getservbyport
(int port,
const char *protokol)
işlev
getservbyport işlevi port portunda protokol protokolünü kullanan servis hakkında bilgi döndürür. Eğer böyle bir servis bulamazsa boş gösterici döndürür.
setservent, getservent ve endservent işlevlerini kullanarak da servis veritabanını tarayabilirsiniz. Bu işlevleri kullanırken dikkat ediniz çünkü bunlar evresel (reentrant) işlevler değildirler.
void setservent
(int açıkkal)
işlev
Bu işlev servis veritabanını taramaya başlamak için açar.
Eğer açıkkal argümanı sıfır değise, bu bir bayrağı kaldırarak getservbyname veya getservbyport işlevlerine yapılan çağrılarda veritabanının kapanmamasını sağlar (normalde olması gerektiği gibi). Bu yaklaşım işlevlerin sık çağırılması durumunda veritabanının her çağrıda tekrardan açılmasından kurtararak verimi artırır.
struct servent *getservent
(void)
işlev
Bu işlev servis veritabanındaki bir sonraki girdiyi geri döndürür. Eğer başka girdi yoksa boş gösterici döndürür.