Aşağıdaki kod parçacığı, tümü aynı dinleme soketini paylaşan 4 işlem oluşturur.Bağlantıları kabul etmeden önce veya sonra çatal mı?
Bunu yaparken herhangi bir tehlike var mı? Bağlantının kabul edilmesinden sonra her zaman bir dinleme işlemine ve çatala mı ihtiyacım var?
for (p = 0; p < 3; p++) {
pid = fork();
if (pid == 0) break;
}
while (1) {
unsigned int clientlen = sizeof(echoclient);
/* Wait for client connection */
if ((clientsock =
accept(serversock, (struct sockaddr *) &echoclient,
&clientlen)) < 0) {
die("Failed to accept client connection");
}
fprintf(stdout, "Process No. %d - Client connected: %s\n",
p,
inet_ntoa(echoclient.sin_addr));
handle_client(clientsock);
}
(I proto-parçacığı ve çeşitli zaman uyumsuz şeylerle etrafında oynuyorum. Kabul ettikten sonra çatallama bir program bağlantı başına bir işlem yapmaya izin verdiğini anlamak yüzden sadece çekirdek başına bir süreci olan bakıyorum .)
TCP katmanında, kaputun arkasında bir tcp bağlantısı (aka ağaç yolu kolu titremesi) kabul etmek için thr çekirdek görevidir. Burada hiç bir IPC'ye ihtiyaç duyulmadığından emin oldum. SO üzerinde bir kişi nerede bir platorm biliyor mu? –
Stevens'a göre, BSD türetilmiş çekirdekleri her zaman yaptı. Bazı eski SysV sistemleri bir kütüphanede kabul edildi ve kilitleme gerekiyordu. Şüpheli olan herkes eskiden bir üretim işletim sistemi işletiyor ama asla bilmeyeceğinizi düşünüyorum. – Duck
Ön çatal kullanıyorsak, Linux'ta setsockopt (server_fd, REUSEPORT) gerekmiyor, değil mi? –