CONNECT(2)

İSİM
connect - soket üzerinde bağlantı oluşturur

BİLDİRİM
#include <sys/types.h>          /* NOTLAR’a bakın */
#include <sys/socket.h>

int connect
    (int sockfd, const struct sockaddr *addr, socklen_t addrlen);

AÇIKLAMA
connect() sistem çağrısı, sockfd ile belirtilen soketi addr ile belirtilen adrese bağlar. addrlen ile addr boyutu belirlenir. addr içindeki adresin biçimi, sockfd soketinin adres uzayı tarafından belirlenir; daha ayrıntılılı bilgi için socket(2) sayfasına bakılabilir.

Eğer soket sockfd SOCK_DGRAM türünden ise, addr, verilerin gönderildiği ve alındığı öntanımlı adres olur. Eğer soket SOCK_STREAM veya SOCK_SEQPACKET türünden ise, sistem çağrısı, addr ile ilişkilendirilen soketle bağlantı kurmaya çalışır.

Bazı protokol soketleri (örneğin UNIX alanı akım soketleri) sadece bir kere başarıyla connect() yapabilir.

Bazı protokol soketleri (örneğin UNIX ve İnternet alanları içerisindeki veri soketleri) bağlantılarını değiştirmek için connect()’i çok kez kullanabilir.

Bazı protokol soketleri (örneğin UNIX ve İnternet alanları içerisindeki TCP ve veri soketleri) sockaddr’in sa_family üyesi AF_UNSPEC olarak ayarlanmış bir adrese bağlanarak ilişkiyi çözebilir; sonrasında, soket bir başka adrese bağlanabilir. (AF_UNSPEC Linux’da, çekirdek 2.2’den itibaren desteklenmektedir.)

DÖNÜŞ DEĞERİ
Bağlantı veya ilişkilendirme bşarılı ise sıfır döner. Hata durumunda -1 dönder ve hata errno değişkenine atanır.

HATALAR
Aşağıdaki hatalar genel soketler içindir. Diğer alanların özelinde başka hata kodları olabilir.

EACCES
    Dosya yoluna göre tanınan UNIX alan soketleri için: soket dosyası için yazma izni veya dosya yolundaki bir dizin için arama izni reddedilmiş. (Ayrıca path_resolution(7) sayfasına bakın.)

EACCES, EPERM
    Kullanıcı, soket için yayın bayrağını etkinleştirmeden yayın adresine bağlanmaya çalışmış ya da yerel güvenlik duvarı kuralı yüzünden bağlantı isteği başarılı olmamış.

    SElinux protokolü bağlantıyı reddederse de EACCES dönebilir (örneğin, HTTP vekilinin sadece HTTP sunucularıyla birleştirilmiş portlara bağlanabileceğine dair bir protokol varsa, ve vekil başka bir porta bağlanmaya çalıştıysa).

EADDRINUSE
    Yerel adres kullanımda.

EADDRNOTAVAIL
    (İnternet alanı soketleri için) sockfd ile belirtilen soket, önceden bir adres ile ilişkilendirilmemiş ve soketi geçici bir portla ilişkilendirmeye çalışırken geçici port aralığındaki tüm portların kullanımda olduğu anlaşılmış. ip(7) sayfasındaki /proc/sys/net/ipv4/ip_local_port_range ile ilgili açıklamaya bakınız.

EAFNOSUPPORT
    Belirtilen adresin sa_family alanındaki adres ailesi doğru değil.

EAGAIN
    Engellemesiz UNIX alan soketler için, soket engellemesiz ve bağlantı hemen tamamlanamıyor. Diğer soket aileleri için, yönledirme önbelleğinde yeterli girdi yok.

EALREADY
    Soket engellemesiz ve bir önceki bağlantı girişimi tamamlanamamış.

EBADF
    Belirtilen sockfd uygun bir açık dosya tanıtıcısı değil.

ECONNREFUSED
    Aktarım soketi üzerinde connect(), dinleme yapmayan bir adrese yapılmış.

EFAULT
    Soket adres yapısı, kullanıcı adres uzayının dışında.

EINPROGRESS
    Soket engellemesiz ve bağlantı hemen tamamlanamıyor. (Başarısız UNIX alan soketleri bunun yerine EAGAIN ile döner.) select(2) veya poll(2) ile soketi yazmak için seçerek bağlantıyı tamamlamak mümkündür. select(2) yazılabilirliği gösterdikten sonra, getsockopt(2) kullanarak SOL_SOCKET seviyesinde SO_ERROR ayarını okuyup connect()’in başarılı olduğu (SO_ERROR sıfır olur) veya olmadığı (SO_ERROR burada listelenen bir hata kodu olur ve hatanın sebebini açıklar) belirlenir.

EINTR
    Sistem çağrısı bir sinyal ile kesilmiş; signal(7) sayfasına bakın.

EISCONN
    Soket zaten bağlı.

ENETUNREACH
    Ağa ulaşılamıyor.

ENOTSOCK
    Belirtilen sockfd’nin bir soketle ilgisi yok.

EPROTOTYPE
    Soket türü istenilen iletişim protokolünü desteklemiyor. Bu hata, örneğin UNIX alan veri soketini aktarım soketine bağlamaya çalışıldığında oluşabilir.

ETIMEDOUT
    Bağlama girişimi sırasında zaman aşımı. Sunucu yeni bağlantıları kabul edemeyecek kadar yoğun olabilir. Sunucuda eşzamanlı çerezler etkinleştirildiğinde IP soketleri için zaman aşımı çok uzun olabilir.

UYUMLULUK
POSIX.1-2001, POSIX.1-2008, SVr4, 4.4BSD (connect() ilk defa 4.2BSD ile ortaya çıktı).

NOTLAR
POSIX.1’de, <sys/types.h> dahil edilmeyi gerektirmez ve yine bu başlık dosyası Linux’da da gerekmez. Fakat bazı tarihsel (BSD) uygulamalardan ötürü bu başlık dosyasının olması gerekir ve uygulamaların taşınabilirliği için dahil edilmesi akıllıca olacaktır.

socklen_t’nin arka planı için accept(2) sayfasına bakın.

Eğer connect() başarılı olmazsa, soketin durumu belirtilmemiş olarak kabul edilir. Taşınabilir uygulamalar tekrar bağlanmak için soketi kapatmalı ve yeni bir tane oluşturmalıdır.

ÖRNEKLER
connect()’in örnek kullanımı getaddrinfo(3) sayfasında verilmiştir.

İLGİLİ BELGELER
accept(2), bind(2), getsockname(2), listen(2), socket(2), path_resolution(7), selinux(8)

ÇEVİREN
© 2022 Fatih Koçer
Bu çeviri özgür yazılımdır: Yasaların izin verdiği ölçüde HİÇBİR GARANTİ YOKTUR.
Lütfen, çeviri ile ilgili bildirimde bulunmak veya çeviri yapmak için https://github.com/TLBP/manpages-tr/issues adresinde "New Issue" düğmesine tıklayıp yeni bir konu açınız ve isteğinizi belirtiniz.