Я хочу читать и обрабатывать все строки от клиентов, но кажется, что только одна строка читается за раз. Я думал, что есть цикл, в то время как прочитанные данные будут читать все, но это, похоже, не так. Если чтение неполное, я продолжу его с этого индекса на следующем шаге.чтение всех строк от клиента в C
У меня есть что-то вроде этого:
if (select(maxfd + 1, &fdlist, NULL, NULL, NULL) < 0) {
perror("select");
} else {
if (FD_ISSET(listenfd, &fdlist)) {
newclientconnection();
}
// see which clients have activity
for (p = head; p; p = p->next) {
if (FD_ISSET(p->fd, &fdlist)) {
// want to read all lines from client
while ((n = read(p->fd, p->buf + lastindex, MAX-p->lastindex) > 0) {
p->lastindex += n;
}
if (n==0) {
removeclient(p);
}
// want to process all the lines
process(p->buf);
}
}
Или сделать файловый дескриптор неблокирующим с O_NONBLOCK? –
@JonathanLeffler Конечно! есть несколько вариантов, поэтому я написал «и т. д.». – MeNa