socket() -- Al Şu Dosya Tanımlayıcıyı!
Önceki Sistem Çağrıları veya Felaketleri Sonraki
socket() -- Al Şu Dosya Tanımlayıcıyı!
Sanırım artık daha fazla erteleyemem -- socket() sistem çağrısından bahsetmek zorundayım. İşte o işlev:
#include <sys/types.h>
#include <sys/socket.h>

int socket(int domain, int type, int protocol); 
Peki ya argümanlar? Önce, domain argümanına AF_INET değeri verilmeli, tıpkı struct sockaddr_in yapısında olduğu gibi. Sonra type argümanı çekirdeğe ne tür bir soket söz konusu olduğunu söyler: SOCK_STREAM veya SOCK_DGRAM. Son olarak da protocol argümanına "0" değerini verelim ki socket(), type değişkenine karşılık gelen uygun protokolü seçebilsin. (Dikkat: Bahsettiğimden daha çok domain ve type vardır. Bkz. socket() man sayfası. Ayrıca protocol değerini öğrenmenin "daha iyi" bir yöntemi vardır. Bkz. getprotobyname() man sayfası.)
socket() işlevi size bir soket tanımlayıcı döndürür ve artık siz bunu daha sonraki işlevlerinize parametre olarak geçebilirsiniz. Eğer bir hata oluşursa işlev -1 değerini döndürür. Bu durumda errno isimli global değişken hata kodunu tutar (bkz. perror() man sayfası.)
Bazı belgelerde mistik bir PF_INET ifadesi görebilirsiniz, korkmayın. Normalde bu canavar günlük hayatta pek karşınıza çıkmaz fakat gene de kendisinden biraz bahsedeyim. Uzun zaman önce adres ailesinin (AF_INET'deki "AF" "Address Family" manasındadır) pek çok protokolü destekleyebileceği düşünülmüştü ( PF_INET'deki "PF" "Protocol Family" manasındadır). Ancak böyle bir şey olmadı. Yani doğru olan, AF_INET değerini struct sockaddr_in yapısında kullanmanız ve PF_INET'i ise socket() çağırırken kullanmanızdır. Ancak pratik olarak AF_INET'i her yerde kullanabilirsiniz. Bu işin üstadlarından W. Richard Stevens kitabında böyle yaptığı için ben de burada böyle yapacağım.
Peki tamam çok güzel de bu soket ne işe yarar? Tek başına bir işe yaramaz tabii, lütfen okumaya devam edin ve diğer sistem çağrılarını öğrenin ki taşlar yerine otursun.
Önceki Üst Ana Başlık Sonraki
Sistem Çağrıları veya Felaketleri Başlangıç bind() -- Hangi Port Üzerindeyim?
Bir Linux Kitaplığı Sayfası