Ошибка сегментации при вызове 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, и только если она положительна, вы можете приступить к выполнению кода, который ее принимает.