我注意到netcat不允許你在端口範圍內監聽單個端口。我用C和一個客戶端和一個服務器函數編寫了一個基本的netcat類程序。我現在正在研究在多個端口上進行監聽的最佳方式。在多個端口綁定/監聽,是否正確的方式?
我的目標用法是:program 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的答案。有一些東西會激發線程在select上,但只是監聽端口不是其中之一。 – jedwards
IIRC每個線程的默認開銷爲8mb開銷,對於小程序(<8mb),分支通常更輕,但select/poll/epoll會更加輕微 – technosaurus