Sürekli "socket"lerden bahsedildiğini duymuşsunuzdur ve belki de bunların
tam olarak ne anlama geldiğini merak ediyor olabilirsiniz. Soket kısaca
şudur: Diğer programlarla standart Unix dosya tanımlayıcılarını kullanarak
haberleşmenizi sağlayan bir yapı.
Ne?
Pekala -- bazı Unix hacker'larının, "Vay canına! Unix'teki hemen hemen
herşey bir dosya!" dediğini duymuş olabilirsiniz.
Böyle konuşan birinin kast ettiği aslında Unix programlarının, herhangi
bir G/Ç işlemi yaptıklarında bunları bir dosya tanımlayıcıyı okuyarak
ya da ona yazarak yaptıklarıdır. Bir dosya tanımlayıcı basitçe söylemek
gerekirse açık bir dosya ile ilişkilendirilmiş bir tamsayıdır. Ancak
(işin püf noktası da burası), söz konusu bu açık dosya diskteki normal
bir dosya olabileceği gibi aynı zamanda bir ağ bağlantısı, bir FIFO,
bir uçbirim ya da başka herhangi bir veri kaynağı olabilir. Gerçekten
de Unix ortamında her şey bir dosyadır! Öyleyse Internet üzerinden başka
bir programla iletişim kurmak isterseniz bunu bir dosya tanımlayıcı
üzerinden yapacaksınız, inanın buna.
"Peki bay çok bilmiş, ağ iletişimi için kullanacağım bu dosya tanımlayıcı
nerede?" gibi bir soru aklınıza gelmemiş olabilir ancak ben gene de cevabını
vereyim ki içiniz rahat etsin: Bu dosya tanımlayıcıya ulaşmak için
socket() sistem işlevini çağırmanız gerekir. Bu işlev
size soket tanımlayıcıyı döndürür ve siz de bunu ve tabii
send() ile
recv()
(
man send,
man recv)
isimli soket işlevlerini kullanarak istediğiniz şekilde iletişimizini
kurarsınız.
"Hey, bir dakika!" diyebilirsiniz şimdi. "Eğer bir dosya tanımlayıcı söz
konusu ise o halde tanrı aşkına neden her zaman kullandığım normal
read() ve write() işlevlerini
kullanarak soketler üzerinden iletişim kuramayayım ki?" Kısa cevap:
"Evet tabii ki!" Uzun cevap ise "Evet, mümkün ama
send() ve recv() işlevleri
veri iletişiminde çok daha fazla kontrol sağlar ve işinizi kolaylaştırır."
Sırada ne var? Buna ne dersiniz: çeşit çeşit soket vardır. Mesela DARPA
Internet adresleri (Internet Soketleri), yerel bir düğümdeki (node) yol
isimleri (Unix Soketleri), CCITT X.25 adresleri (X.25 Soketleri ki inanın
bunları bilmeseniz de olur) ve kullandığınız Unix sürümüne bağlı daha pek
çok soket tipi. Bu belge sadece birinci tür soketleri ele almaktadır,
yani: Internet Soketleri.