Untitled
public text v1 · immutable for(i = 0; i <= fdmax; i++) {
if (FD_ISSET(i, &read_fds)) { /
FILE *fp;
if (i == listener) {
//handle new connections
addrlen = sizeof remoteaddr;
if ((newfd = accept(listener, (struct sockaddr *)&remoteaddr, &addrlen)) == -1) {
perror("accept");
} else {
FD_SET(newfd, &master); //add to master set
if (newfd > fdmax) { //keep track of the maximum
fdmax = newfd;
}
}
} else {
//handle data from a client
if ((nbytes = recv(i, buf, sizeof buf, 0)) <= 0) {
//got error or connection closed by client
if (nbytes == 0) {
//connection closed
printf("selectserver: socket %d hung up\n", i);
} else {
perror("recv");
}
close(fp);
close(i); //bye!
FD_CLR(i, &master); //remove from master set
} else {
fwrite(buf,sizeof(buf),1, fp) ;
}
}
}
}