【发布时间】:2013-10-03 06:36:08
【问题描述】:
我注意到 netcat 不允许您仅在单个端口上侦听端口范围。我用 C 语言编写了一个基本的类似 netcat 的程序,带有一个客户端和一个服务器功能。我现在正在研究监听多个端口的最佳方式。
我的目标是这样的用法:程序 localhost 200 300(其中 200 是开始,300 是结束端口)。
pthreads 是最好的方法吗?在每个线程上绑定/侦听,然后在建立连接时将它们加入备份?
iret1 = pthread_create( &thread1, NULL, bind_function, (void*) somename);
pthread_join( thread1, NULL);
线程确实是一个新领域,我不确定是否有更简单的方法,或者您将如何进一步使用 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");
}
我的绑定码:
if (bind(sockfd, (struct sockaddr *) &server_addr, server_len) < 0)
error("ERROR");
listen(sockfd,5);
newsockfd = accept(sockfd, (struct sockaddr *) &client_addr, &clilen);
【问题讨论】:
-
如果您只想听,请参阅@Dolda2000 的回答。有一些事情会激发线程超过选择,但只是监听端口不是其中之一。
-
IIRC 每个线程默认有大约 8mb 的开销,对于小程序 (