मुझे इस सर्वर की जरूरत है कि ग्राहकों के साथ नए कनेक्शन सुनने और स्थापित करने में सक्षम हों, साथ ही साथ मौजूदा कनेक्शनों को लिखना .. यानी। असीमित गैर-अवरुद्ध i/o। मुझे मतदान() का उपयोग करने के लिए कहा गया है लेकिन सॉकेट प्रोग्रामिंग को समझने की कोशिश करने के लिए एक अनोखा समय खर्च करने के बाद, मैं अभी भी अनिश्चित हूं कि मतदान() फ़ंक्शन को कैसे कार्यान्वित किया जाता है।एक टीसीपी सर्वर के पढ़ने/लिखने पर मतदान() को लागू करना
int sockfd;
int main(int argc, char *argv[])
{
int newsockfd, portno;
socklen_t clilen;
char buffer[256];
struct sockaddr_in serv_addr, cli_addr;
int n;
if (argc < 2) {
fprintf(stderr,"ERROR, no port provided\n");
exit(1);
}
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
error("ERROR opening socket");
bzero((char *) &serv_addr, sizeof(serv_addr));
portno = atoi(argv[1]);
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(portno);
if (bind(sockfd, (struct sockaddr *) &serv_addr,
sizeof(serv_addr)) < 0)
error("ERROR on binding");
listen(sockfd,5);
clilen = sizeof(cli_addr);
while(1){
newsockfd = accept(sockfd,
(struct sockaddr *) &cli_addr,
&clilen);
if (newsockfd < 0)
error("ERROR on accept");
// READ READ READ READ READ READ READ READ READ READ READ READ READ READ READ READ
bzero(buffer,256);
n = read(newsockfd,buffer,255);
if (n < 0) error("ERROR reading from socket");
printf("Here is the message: %s\n",buffer);
// WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE WRITE
n = write(newsockfd,"I got your message",18);
if (n < 0) error("ERROR writing to socket");
close(newsockfd);
}
return 0;
}
मेरे समझ है कि मैं कुछ इस तरह का निर्माण करने की आवश्यकता है:
// Set up array of file descriptors for polling
struct pollfd ufds[2];
ufds[0].fd = sockfd;
ufds[0].events = POLLIN;
ufds[1].fd = newsockfd;
ufds[1].events = POLLOUT;
और उपयोग सर्वेक्षण (ufds, 2,2000); लूप के अंदर यह जांचने के लिए कि क्या सॉकफड या न्यूज़ॉकएफडी में कोई गतिविधि है, इस मामले में मैं उचित पढ़ने या लिखने का उपयोग करता हूं .. अगर कोई मुझे कुछ मार्गदर्शन दे सकता है तो मैं बहुत सराहना करता हूं।
क्या आपने "चयन" के बारे में पढ़ा है? – NiRR