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.