C
connect
connect ile istemci bağlantısı öğrenirsin.
connect
connect(fd, (struct sockaddr *)&addr, sizeof(addr)), istemciyi sunucuya bağlar. addr, sunucunun adresiyle aynı şekilde doldurulur. Başarıda 0, hatada -1 döner.
İstemci önce socket ile soket oluşturur, sonra connect ile bağlanır. Bağlantı kurulduktan sonra send ve recv ile veri alışverişi yapılır. connect başarısız olursa sunucu dinlemiyor olabilir; errno'ya bak.
İstemci-sunucu deseni
Klasik desende sunucu socket, bind, listen, accept adımlarını izler; istemci ise socket ve connect. Bağlantı kurulduktan sonra iki taraf da send ve recv kullanır.
Sunucu ve istemci farklı programlar olabileceği gibi, aynı programda fork ile de çalıştırılabilir. Çocuk süreç istemci, ebeveyn sunucu rolünü üstlenir. Bu, test için kullanışlı bir desendir; sıralama garantilidir.
Uygulama İstemci olarak bağlan
Soket oluştur, bind ve listen(listen_fd, 1). fork() ile çocuk sunucu olsun: accept(listen_fd, NULL, NULL). Ebeveyn istemci: int cfd = socket(AF_UNIX, SOCK_STREAM, 0); ve connect(cfd, (struct sockaddr *)&addr, sizeof(addr));. printf("bağlandı\n");. Yol /tmp/cb_c.sock.
Örnek çözümü göster
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>
#include <string.h>
int main(void) {
int listen_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_c.sock", sizeof(addr.sun_path) - 1);
unlink("/tmp/cb_c.sock");
bind(listen_fd, (struct sockaddr *)&addr, sizeof(addr));
listen(listen_fd, 1);
pid_t pid = fork();
if (pid == 0) {
int sfd = accept(listen_fd, NULL, NULL);
close(sfd);
_exit(0);
}
int cfd = socket(AF_UNIX, SOCK_STREAM, 0);
connect(cfd, (struct sockaddr *)&addr, sizeof(addr));
printf("bağlandı\n");
close(cfd);
close(listen_fd);
unlink("/tmp/cb_c.sock");
return 0;
}
Kendini test et
-
connect fonksiyonu kim tarafından çağrılır?
- Sunucu
- Çekirdek
- init süreci
- İstemci
Cevabı göster
İstemci — connect istemci tarafından çağrılır.
-
İstemci fonksiyonlarını eşle
- connect
- Sunucuya bağlanır
- socket
- Soket oluşturur
- send
- Veri yollar
- recv
- Veri alır
-
connect çağrısı
connect(fd, (struct sockaddr *)&____, sizeof(addr));
Cevabı göster
connect(fd, (struct sockaddr *)&addr, sizeof(addr));
Sıradaki ders: send ve recv