connect()--Hey, sen!
Önceki Sistem Çağrıları veya Felaketleri Sonraki
connect()--Hey, sen!
Diyelim ki bir telnet programısınız. Sizi kullanan kişi (tıpkı TRON filminde olduğu gibi) size bir soket dosya tanımlayıcısı edinmeniz için komut veriyor. Siz de bu komuta uyup socket() işlevini çağırıyorsunuz. Sonra, kullanıcı sizden "10.12.110.57" adresine ve "23" numaralı porta bağlanmanızı istiyor (standart telnet portu). Aha! Şimdi ne yapacaksınız?
Bir program olarak şanslısınız çünkü tam da connect() bölümündeyiz -- uzaktaki bir bilgisayara nasıl bağlanırız bölümü. Okumaya devam kaybedecek zaman yok, kullanıcı bekliyor!
connect() işlevi şöyle birşeydir:
#include <sys/types.h>
#include <sys/socket.h>

int connect(int sockfd, struct sockaddr *serv_addr, int addrlen); 
sockfd dediğimiz değişken socket() sistem çağrısı tarafından döndürülmüş olan soket dosya tanımlayıcısının değerini tutar. serv_addr ise struct sockaddr türünde bir değişkendir ve hedef port ile IP adres bilgilerini barındırır. addrlen değişkeni de sizeof(struct sockaddr) değerini alırsa iyi olur.
Taşlar yerine oturmaya başladı mı? Hemen bir örneğe göz atalım:
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define DEST_IP   "10.12.110.57"
#define DEST_PORT 23

main()
{
    int sockfd;
    struct sockaddr_in dest_addr;             // hedef adres

    sockfd = socket(AF_INET, SOCK_STREAM, 0); // hata denetimi yapın!

    dest_addr.sin_family = AF_INET;          // konak bayt sıralaması
    dest_addr.sin_port = htons(DEST_PORT);   // short, ağ bayt sıralaması
    dest_addr.sin_addr.s_addr = inet_addr(DEST_IP);
    memset(&(dest_addr.sin_zero), '\0', 8);  // yapının geriye kalanını sıfırla

    // connect() işlevini çağırdıktan sonra hata denetimi yap!
    connect(sockfd, (struct sockaddr *)&dest_addr, sizeof(struct sockaddr));
    .
    .
    . 
Sıkılsanız da söylemek zorundayım: connect() işlevinden sonra mutlaka hata denetimi yapın, eğer hata oluştu ise bu işlev -1 değerini döndürür ve errno değişkenine ilgili hata numarasını yerleştirir.
Ayrıca bind() işlevini çağırmadığımıza da dikkat edin. Yani kısaca yerel port numarası ile ilgilenmiyoruz; bizi ilgilendiren hedef bilgisayar (uzaktaki port). İşletim sistemi çekirdeği bizim için bir yerel port bulacaktır ve bağlandığımız bilgisayar da bu bilgiyi otomatik olarak bizden öğrenecektir. Siz tatlı canınızı üzmeyin.
Önceki Üst Ana Başlık Sonraki
bind() -- Hangi Port Üzerindeyim? Başlangıç listen() -- Biri Beni Arayabilir mi Acaba?
Bir Linux Kitaplığı Sayfası