мой сервер только отображает первое сообщение о любых новых клиентах, но не отправляет другое сообщение, вот код:
void init_serv(serv_t *serv)
{
int i = 0;
serv->ret = poll(serv->fds, serv->nfds, 0);
if (serv->ret < 0)
{
perror("poll() failed");
return;
}
serv->current_size = serv->nfds;
for (i = 0; i < serv->current_size; i++) {
if(serv->fds[i].revents == 0)
continue;
if(serv->fds[i].revents != POLLIN) {
printf("Error! revents = %d\n", serv->fds[i].revents);
serv->end_server = 1;
break;
}
if (serv->fds[i].fd == serv->sockfd) {
do {
serv->newfd = accept(serv->sockfd, NULL, NULL);
if (serv->newfd < 0) {
if (errno != EWOULDBLOCK) {
perror(" accept() failed");
serv->end_server = 1;
}
break;
}
serv->fds[serv->nfds].fd = serv->newfd;
serv->fds[serv->nfds].events = POLLIN;
serv->nfds++;
} while (0);
} else {
serv->close_conn = 1;
do {
serv->ret = recv(serv->fds[i].fd, serv->buffer, sizeof(serv->buffer), 0);
printf("Buffer = %s\n", serv->buffer);
bzero(serv->buffer, sizeof(serv->buffer));
if (serv->ret < 0) {
if (errno != EWOULDBLOCK) {
perror("recv() failed");
serv->close_conn = 1;
}
break;
}
if (serv->ret == 0) {
printf("Connection closed\n");
serv->close_conn = 1;
break;
}
} while (1);
if (serv->close_conn) {
close(serv->fds[i].fd);
serv->fds[i].fd = -1;
}
}
serv->fds[i].revents = 0;
}
}
Я думаю, что проблема с recv
, но как я могу исправить это, чтобы получать все сообщения от всех клиентов? если я поставлю recv
в al oop while (1)
, я получу все сообщения, но только от первого клиента, подключенного к серверу, и получу другое сообщение, только если я прерву l oop .. .