Я заметил, что netcat не позволяет слушать порты только отдельных портов. Я написал базовую netcat-подобную программу на C с клиентом и функциями сервера. Теперь я изучаю, как лучше всего будет слушать несколько портов.Связывание/прослушивание нескольких портов, является правильным способом?
Я бы постарался использовать как: program localhost 200 300 (где 200 начинается и 300 заканчивается портом).
Является ли pthreads лучшим способом для этого? Привязать/слушать в каждом потоке, а затем, когда соединение будет создано, присоедините их к резервному копированию?
iret1 = pthread_create(&thread1, NULL, bind_function, (void*) somename);
pthread_join(thread1, NULL);
Threading действительно новые земли, и я не уверен, если есть более простой способ, или как бы вы использовали iret1 (возвращаемое значение), дополнительно. Может кто-нибудь добавить к этому?
Примечания для Dolda2000:
пример использования на Epoll я наткнулся:
for (j = 1; j < argc; j++) {
fd = open(argv[j], O_RDONLY);
if (fd == -1)
errExit("open");
printf("Opened \"%s\" on fd %d\n", argv[j], fd);
ev.events = EPOLLIN; /* Only interested in input events */
ev.data.fd = fd;
if (epoll_ctl(epfd, EPOLL_CTL_ADD, fd, &ev) == -1)
errExit("epoll_ctl");
}
Мой Binding код:
if (bind(sockfd, (struct sockaddr *) &server_addr, server_len) < 0)
error("ERROR");
listen(sockfd,5);
newsockfd = accept(sockfd, (struct sockaddr *) &client_addr, &clilen);
Если вы просто хотите слушать, видеть @ ответ Dolda2000 в. Есть некоторые вещи, которые будут мотивировать потоки по выбору, но просто слушать порты не является одним из них. – jedwards
По умолчанию в каждой ветке по умолчанию накладные расходы ~ 8 МБ, forking обычно легче для небольших программ (<8mb), но select/poll/epoll будет еще легче – technosaurus