Bu blog, Linux ağ programlama hakkında temel bilgiler içermektedir.

12 Haziran 2017 Pazartesi

13. Soket Fonksiyonları

Haziran 12, 2017 Posted by Burak Candan No comments
İhtiyaca yönelik olarak aplikasyonlarda aşağıda belirtilen fonksiyonlardan bazıları kullanılmaktadır. Duruma göre hepsi kullanılabilir veya burada yer almayan fonksiyonlara ihtiyaç duyulabilir. Bazı platformlara özgü fonksiyonlar veya üçüncü parti kütüphaneler mevcuttur. Bu tarz spesifik alanlara ait fonksiyonlar burada yer almamaktadır. Bu çalışmada tipik Linux sisteminde yer alan fonksiyonlar, parametreleri ve kullanımları gösterilmiştir.

Core Fonksiyonları

İstemci olabilmek için ilk önce server görevi görebilmek gerekmektedir. Bu yüzden ilk önce server soket tipine uygun fonksiyonlar incelenecektir.

Socket()

Socket() en kritik fonksiyondur diyebiliriz. Bu fonksiyon olmadan aplikasyon ağ ile iletişime geçemez. Socket() fonksiyonu ağ sonu noktası oluşturur.
Fonksiyon kullanımı: int socket(int domain, int type, int protocol);
bind()

Soket oluşturulduktan sonra bir bağlantı adresi gerekmektedir. Bağlantı oluşturulması için bind() fonksiyonu kullanılır.
Fonksiyon kullanımı: inf bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen);
bind fonksiyonunun içindeki ilk parametre soketin tanımlayıcısıdır. İkinci parametre ise sockddr yapı işaretcisidir. Üçüncü parametre de sockaddr yapısının uzunluğudur.
listen()

Sıradaki fonksiyon listen() fonksiyonudur. Bağlantı da oluşturulduğuna göre soket, bağlantı kabul etmeye hazırdır. Ayrıca bu fonksiyonla bağlantılar reddedilmeye başlanmadan önce alınabilecek maksimum bağlantı sayıda belirtilebilir.

Fonksiyonun Kullanımı: int listen(int s, int backlog);

backlog sabiti kaç bağlantıdan sonra reddetme işleminin başlayacağını belirler. Backlog için tipik değer 5'tir. 

Accept()

Önceki fonksiyonlar başarılı bir şekilde tatbik edildiği halde soket oluşturulmuş olur. Böylece bir sonraki basamak olan bağlantı kabul aşamasına geçilebilir. Bu işlem için kullanılması gereken fonksiyon accept() fonksiyonudur.

Fonksiyon Kullanımı: int accept(int s, struct sockaddr  *addr, socklen_t *addrlen);

Write()

İstemciye cevap verilmesi için string karakterleri gönderilmesi gerekmektedir. Bunun için write() fonksiyonu kullanımı icap etmektedir.

Fonksiyon Kullanımı: ssize_t wrte (int fd, const void *buf, size_t count);

Close()

İşlemlerin kapatılması gerekir. Bunun için close() fonksiyonu mevcuttur.

Fonksiyon Kullanımı: int close(int fd);

Bunlar dışında başka fonksiyonlar da mevcuttur. Yazıyı detaya boğmamak için sadece isimleri veirilip geçilecektir. Kullanımlarına dair detaylı anlatımlar internetteki bağımsız kaynaklarda mevcuttur. Linux Ağ Programlamada unutulmaması gereken önemli bir konu da programlama esnasında baz alınan protokoldür. Yazının genelinde TCP (Transmission Control Protocol) baz alınmıştır. Bağlantıyı sağlayan diğer bir protokol ise User Datagram Protocol(UDP)'dür. İki protokolde farklılıklar ortaya çıkmaktadır. Uygulama bölümünde TCP baz alınarak basit bir pasif soket programlama örneği yer almaktadır.

0 yorum:

Yorum Gönder