CodeBlanks Logo Icon CodeBlanks

socket ve bind

  • C kursu
  • İleri seviye
  • Ders 26/83
  • 5 dk

socket ve bind ile sunucu kurmayı öğrenirsin.

socket ve bind

socket(domain, type, protocol), yeni bir soket oluşturur ve tanıtıcı döndürür. domain için AF_UNIX, type için SOCK_STREAM, protocol için 0 (öntanımlı) verirsin.

bind(fd, (struct sockaddr *)&addr, sizeof(addr)), soketi bir adrese bağlar. addr, struct sockaddr_un türündendir; sun_family alanına AF_UNIX, sun_path alanına dosya yolunu yazarsın. Başarıda 0, hatada -1 döner.

Adres yapısı hazırlığı

bind öncesi adres yapısını doğru doldurmalısın. Önce memset(&addr, 0, sizeof(addr)) ile sıfırla; bu, sun_path'in temiz olmasını sağlar.

Sonra addr.sun_family = AF_UNIX; ve strncpy(addr.sun_path, "/tmp/sock", sizeof(addr.sun_path) - 1); ile yolu kopyala. strncpy'nin son -1'i taşmayı önler. Eski soket dosyasını unlink ile silmek iyi bir alışkanlıktır; yoksa bind hata verir.

Uygulama Soket oluştur ve bağla

int fd = socket(AF_UNIX, SOCK_STREAM, 0); ile soket oluştur. struct sockaddr_un addr; tanımla; memset(&addr, 0, sizeof(addr)), addr.sun_family = AF_UNIX;, strncpy(addr.sun_path, "/tmp/cb.sock", sizeof(addr.sun_path) - 1);. unlink("/tmp/cb.sock"); ve bind(fd, (struct sockaddr *)&addr, sizeof(addr));. printf("bağlandı\n"); ve close(fd);.

Başlangıç kodu

main.c
#include <stdio.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>
#include <string.h>

// socket oluştur
// adres yapısını doldur ve bind çağır
// bağlandı yazdır ve kapat

int main(void) {
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>
#include <string.h>

int main(void) {
    int fd = socket(AF_UNIX, SOCK_STREAM, 0);
    struct sockaddr_un addr;
    memset(&addr, 0, sizeof(addr));
    addr.sun_family = AF_UNIX;
    strncpy(addr.sun_path, "/tmp/cb.sock", sizeof(addr.sun_path) - 1);
    unlink("/tmp/cb.sock");
    bind(fd, (struct sockaddr *)&addr, sizeof(addr));
    printf("bağlandı\n");
    close(fd);
    return 0;
}

Beklenen çıktı

bağlandı

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 socket ve bind parçalarını eşle

Kavram Anlamı
socket Soket oluşturur
bind Adrese bağlar
sockaddr_un UNIX adres yapısı
memset Sıfırlama

2 bind fonksiyonu ne yapar?

  • Soket oluşturur
  • Soketi adrese bağlar Doğru cevap
  • Dinlemeye başlar
  • Bağlantı kabul eder

Açıklama: bind, soketi bir adrese (ör. dosya yoluna) bağlar.

3 bind çağrısı

Soru
bind(fd, (struct sockaddr *)&____, sizeof(addr));
Cevap
bind(fd, (struct sockaddr *)&addr, sizeof(addr));

Açıklama: bind, addr adres yapısını sokete bağlar.

İleri seviye bölümündeki tüm dersler