Ich brauche diesen Server in der Lage sein zu hören und neue Verbindungen mit Clients zu etablieren, während gleichzeitig in bestehende Verbindungen schreiben .. ie. Asynchroner nicht blockierender E/A. Mir wurde gesagt, dass ich poll() verwenden soll, aber nachdem ich eine übermäßige Zeit damit verbracht habe, Socket-Programmierung zu verstehen, bin ich immer noch unsicher, wie die poll() -Funktion implementiert werden soll.Implementieren von Poll() auf einem TCP-Server lesen/schreiben
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;
}
Mein Verständnis ist, dass ich so etwas bauen müssen:
// 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;
und Nutzung Umfrage (UFDs, 2,2000); innerhalb der Schleife, um zu überprüfen, ob sockfd oder newsockfd irgendeine Aktivität haben, in diesem Fall benutze ich das entsprechende lesen oder schreiben .. Wenn jemand mir eine Führung geben könnte, würde ich sehr dankbar sein.
Haben Sie über "select" gelesen? – NiRR