Ошибка сегментации при вызове recvfrom

У меня есть реализация сервера UDP, где я получаю ошибку сегментации на recvfrom вызов.

#define SIZEOF      sizeof
#define PKTSIZE    65535

char tmp_buf[PKTSIZE];
struct sockaddr_storage tmp_from;
int tmp_fromlen = 0;
int tmp_bytes;
tmp_bytes = truncate_size_t_to_int(recvfrom(fd, tmp_buf,
                      SIZEOF(tmp_buf), 0,
                      (struct sockaddr *) &tmp_from,
                      (socklen_t *) &tmp_fromlen));

Как связывание, так и соединение были успешными до этого. Это однопотоковый процесс. Что не так с этим recvfrom вызов. Нужно ли делать SIGALRM обработка сигналов для recvfrom? truncate_size_t_to_int предназначен для size_t до int.

1 ответ

recvfrom() может вернуть -1. Вы не можете написать правильный сетевой код без сохранения результата recv()/recvfrom()/recvmsg() в переменную, проверяя ее на -1, проверяя ее на ноль в случае TCP, и только если она положительна, вы можете приступить к выполнению кода, который ее принимает.

Другие вопросы по тегам