table of contents
CONNECT(2) | Sistem Çağrıları | 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.
11 Nisan 2020 | Linux man-pages 5.10 |