Provided by: manpages-tr_2.0.6-2_all bug

İSİM

       bind - adresi soketle ilişkilendirir

BİLDİRİM

       #include <sys/types.h>          /* NOTLAR’a bakın */
       #include <sys/socket.h>

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

AÇIKLAMA

       socket(2) kullanılarak bir soket oluşturulduğunda, bu soket bir isim uzayında (adres ailesi) ortaya çıksa
       da  ona  bağlı  bir  adres  bulunmaz.  bind(), addr ile belirtilen adresi sockfd ile belirtilen soket ile
       ilişkilendirir. addrlen,  addr  ile  belirtilen  adres  yapısının  bayt  cinsinden  uzunluğunu  belirler.
       Geleneksel olarak bu işleme "sokete isim vermek" denir.

       SOCK_STREAM  soketine gelen bağlantılar kabul edilmeden önce bir yerel adresi soket ile bind() kullanarak
       ilişkilendirmek gerekir (accept(2) sayfasına bakın).

       İlişkilendirmenin kuralları kullanılan adres ailesine göre değişir. Daha ayrıntılı bilgi edimnek için  7.
       bölüme ait şu kılavuz sayfalarına bakın. AF_INET için ip(7), AF_INET6 için ipv6(7), AF_UNIX için unix(7),
       AF_APLETALK için ddp(7), AF_PACKET için packet(7), AF_X25 için x25(7), AF_NETLINK için netlink(7).

       addr için girilen asıl yapı adres ailesine göre değişir. sockaddr yapısı şu şekile tanımlanmıştır.

           struct sockaddr {
                 sa_family_t sa_family;
                 char        sa_data[14];
           }

       Bu  yapının  tek  amacı  addr  ile  verilen  yapı göstericisinin türünü derleyici hatalarını önlemek için
       dönüştürmektir. ÖRNEKLER bölümüne bakın.

DÖNÜŞ DEĞERİ

       Başarılı durumunda sıfır döner. Hata durumunda -1 dönder ve hata errno değişkenine atanır.

HATALAR

       EACCES
           Adres korumalı ve kullanıcı root değil.

       EADDRINUSE
           Belirtilen adres kullanımda.

       EADDRINUSE
           (İ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.

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

       EINVAL
           Soket zaten bir adres ile ilişkilendirilmiş.

       EINVAL
           addrlen yanlış ya da addr bu soketin alanı için geçerli değil.

       ENOTSOCK
           Belirtilen sockfd’nin bir soketle ilgisi yok.

       Aşağıdaki hatalar sadece UNIX (AF_UNIX) alan soketleri için geçerlidir.

       EACCES
           Verilen dizindeki bir bölüm için arama izni verilmemiş. (Ayrıca path_resolution(7) sayfasına bakın).

       EADDRNOTAVAIL
           Var olmayan bir arayüz istenmiş veya istenen adres yerelde mevcut değil.

       EFAULT
           addr, kullanıcının erişebileceği adres alanının dışında.

       ELOOP
           addr çözümlenirken çok fazla sembolik bağ ile karşılaşıldı.

       ENAMETOOLONG
           addr çok uzun.

       ENOENT
           Verilen soket dizinindeki bir bölüm mevcut değil.

       ENOMEM
           Yeterli çekirdek belleği yok.

       ENOTDIR
           Yolun bir bölümü dizin değil.

       EROFS
           Soket düğümü salt-okunur bir dosya sisteminde yer alıyor.

UYUMLULUK

       POSIX.1-2001, POSIX.1-2008, SVr4, 4.4BSD (bind() 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.

HATALAR

       Şeffaf vekil için seçenekler açıklanmamıştır.

ÖRNEKLER

       bind() işlevinin internet alan soketleriyle kullanım örneğini getaddrinfo(3) sayfasında bulabilirsiniz.

       Aşağıdaki örnek, bir akım soketinin UNIX (AF_UNIX)  alan  adıyla  nasıl  ilişkilendirileceğini  ve  gelen
       bağlantıların nasıl kabul edileceğinizi gösterir.

           #include <sys/socket.h>
           #include <sys/un.h>
           #include <stdlib.h>
           #include <stdio.h>
           #include <string.h>

           #define SOKET_YOLU "/somepath"
           #define LISTEN_BACKLOG 50

           #define hatayı_işle(msg) \
               do { perror(msg); exit(EXIT_FAILURE); } while (0)

           int
           main(int argc, char *argv[])
           {
               int sfd, cfd;
               struct sockaddr_un benim_addr, karşı_addr;
               socklen_t karşı_addr_boyut;

               sfd = socket(AF_UNIX, SOCK_STREAM, 0);
               if (sfd == -1)
                   hatayı_işle("socket");

               memset(&benim_addr, 0, sizeof(benim_addr));
                                   /* Yapıyı temizle */
               benim_addr.sun_family = AF_UNIX;
               strncpy(benim_addr.sun_path, SOKET_YOLU,
                       sizeof(benim_addr.sun_path) - 1);

               if (bind(sfd, (struct sockaddr *) &benim_addr,
                       sizeof(benim_addr)) == -1)
                   hatayı_işle("bind");

               if (listen(sfd, LISTEN_BACKLOG) == -1)
                   hatayı_işle("listen");

               /* Artık gelen bağlantılar accept(2) kullanılarak
                  tek tek kabul edilebilir.*/

               karşı_addr_boyut = sizeof(karşı_addr);
               cfd = accept(sfd, (struct sockaddr *) &karşı_addr,
                            &karşı_addr_boyut);
               if (cfd == -1)
                   hatayı_işle("accept");

               /* Gelen bağlantılarla ilgilenecek kod... */

               /* Artık ihtiyaç yoksa, soket yol adı, SOKET_YOLU unlink(2) veya remove(3)
                  kullanılarak silinmelidir. */
           }

İLGİLİ BELGELER

       accept(2),  connect(2),  getsockname(2),  listen(2),  socket(2),  getaddrinfo(3),  getifaddrs(3),  ip(7),
       ipv6(7), path_resolution(7), socket(7), unix(7)

Ç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.

Linux man-pages 5.10                              1 Kasım 2020                                           BIND(2)