Napredna uporaba

Vtičnice

Ker je največ programov za izmenjavo podatkov preko omrežij napisanih v jeziku C, si je smiselno pogledati, kako napisati tudi kakšen tak program.

V večini primerov je potrebno spisati dva programa: program za odjemalca (client) in program za strežnik (server), ki si izmenjujeta podatke. Strežnik lahko izmenjuje podatke z več odjemalci, pri čemer mora biti način izmenjevanja podatkov jasno in vnaprej predpisan v t.i. protokolu.

Veliko o tem je moč prebrati na spletni strani (v angleškem jeziku) Beej's Guide to Network Programming.

Vtičnice

Za poenostavitev izmenjave podatkov se tudi pri izmenjavi podatkov preko omrežij uporabljajo podatkovni tokovi, ki se v tem primeru imenujejo vtičnice (sockets) in s katerimi se ravna popolnoma enako kot z datotekami. Funkcije za delo z vtičnicami se nahajajo v knjižnici sys/socket.h.

Z razliko od datoteko, kjer v večini primerov bodisi zgolj prebiramo bodisi zapisujemo podatke, je vtičnica dvosmerna, kar pomeni, da iz nje lahko beremo in vanjo tudi zapisujemo.

Obstajata dve vrsti vtičnic, in sicer vtičnice, ki jih uporabljajo programi za medsebojno izmenjavo podatkov znotraj enega sistema (računalnika) in vtičnice, ki jih uporabljamo za izmenjavo podatkov med programi, ki se nahajajo na različnih sistemih, povezanih v omrežje. Prve se imenujejo IPC sockets (inter-process sockets). Najpogostejša podvrsta teh so Unix domain socket, ki jo uporablja tudi D-Bus.

Z (omrežnimi) vtičnicami lahko preko omrežja dostopamo na omrežnem ali prenosnem nivoju. Vrsta vtičnice, ki se uporablja na omrežnem nivoju je SOCK_RAW, medtem ko sta na prenosnem nivoju najpogostejši vrsti SOCK_STREAM za TCP in SOCK_DGRAM za UDP.

Vzpostavitev dohodne povezave

Za uspešen prejem dohodne (TCP) povezave, mora program poslušati na ustreznem naslovu in na ustreznih vratih. V ta namen najprej postavi vtičnico, ki posluša, ukaz listen. Ko se na tej vtičnici vzpostavi povezava, jo moramo sprejeti z ukazom accept nakar za izmenjavo podatkov na novi povezavi dobimo novo vtičnico, medtem ko se prvotna vrne v stanje poslušanja.