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
#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
#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ı
bind(fd, (struct sockaddr *)&____, sizeof(addr));
bind(fd, (struct sockaddr *)&addr, sizeof(addr));
Açıklama: bind, addr adres yapısını sokete bağlar.