İstemci-sunucu dünyasında yaşıyoruz, bunu kabul et dostum. Ağ ortamındaki
hemen her süreç ya da uygulama öyle ya da böyle sunucu süreçleriyle
konuşup aldıkları cevaplara göre iş yapıyor ya da tersi oluyor. Mesela
telnet programını ele alalım. Siz uzaktaki bir
konağın 23 numaralı portuna telnet (istemci) ile
bağlandığınızda o konakta da telnetd (sunucu) isimli
bir program soluk alıp vermeye başlar. Bu program gelen
telnet bağlantılarını dinler, size bir "login:"
istemi gönderir, vs. vs.
İstemci ile sunucu arasındaki bilgi alışverişi
Şekil 5.1'de özetlenmiştir.
Dikkat etmeniz gereken noktalardan biri de şudur: istemci-sunucu çifti
birbirleri ile SOCK_STREAM, SOCK_DGRAM
veya başka bir tarzda konuşuyor olabilirler (yeter ki aynı dili
konuşsunlar). İstemci-sunucu çiftlerine birkaç meşhur örnek vermek
gerekirse: telnet/telnetd,
ftp/ftpd veya
bootp/bootpd. Yani ne zaman bir
ftp programı çalıştırsanız diğer tarafta
ftpd gibi size hizmeti sunan bir süreç vardır.
Genellikle sunucu makinada ilgili hizmet için tek bir sunucu program
çalışır ve bu program kendisine bağlanan birden fazla istemciye
fork() işlevi aracılığı ile hizmet eder. Süreci
özetlemek gerekirse: Sunucu bir bağlantı isteği için bekleyecek,
accept() işlevi ile bunu kabul edecek ve
fork() işlevi ile bir çocuk süreç yaratıp veri
alışverişini bu sürece devredecek. Bir sonraki bölümde inceleyeceğimiz
örnek sunucu yazılımın yaptığı iş tam da yukarıda anlatıldığı gibidir.