У меня есть файл контрольных точек, который получает состояние сервера.Это состояние представляет сериализованные команды, которые проходят через мою сеть.
Я пытаюсь прочитать файл, но он застревает в цикле чтения в то время.
Моя функция чтения:
struct message_t *pmanager_readop(int fd){
if (fd < 0) return NULL;
// Variables
char *buffer = NULL;
int result, msg_size;
struct message_t *msg;
// Check if file has data
lseek (fd, 0, SEEK_END);
int size_ckp = lseek(fd, 0, SEEK_CUR);
if (size_ckp <= 0)
return NULL;
// Read message size
result = read_all(fd, (char *) &msg_size, 4);
if (result < 0) {
return NULL;
}
msg_size = ntohl(msg_size);
// ............
Моя функция read_all ():
int read_all(int sock, char *buf, int len){
int bufsize = len;
while(len > 0){
int res = read(sock,buf,len);
if(res < 0){
if (errno == EINTR) continue;
return res;
}
buf += res;
len -= res;
}
return bufsize;
}
Я использую эту же функцию для чтения данных из моего соединения сервер / клиент с той же сериализацией и форматом, но с дескриптором сокета, и она отлично работает.