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.