Я пишу сервер на основе fork()
, сокеты TCP — это канал связи клиентов с сервером, а сокет UDS (датаграмма, если это имеет значение) — это канал связи консоли управления с сервером.
Каким будет правильный способ прослушивания обоих типов сокетов? Мой сервер в настоящее время выглядит почти так же, как сервер fork()
в примере Beej:
while(1) { // main accept() loop
sin_size = sizeof their_addr;
new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size);
if (new_fd == -1) {
perror("accept");
continue;
}
inet_ntop(their_addr.ss_family,
get_in_addr((struct sockaddr *)&their_addr),
s, sizeof s);
printf("server: got connection from %s\n", s);
if (!fork()) { // this is the child process
close(sockfd); // child doesn't need the listener
if (send(new_fd, "Hello, world!", 13, 0) == -1)
perror("send");
close(new_fd);
exit(0);
}
close(new_fd); // parent doesn't need this
}
Как бы вы добавили к приведенному выше коду возможность прослушивания и ожидания соединения в сокете UDS (который уже был привязан).