2015-10-28 2 views
-1

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

отправьте код еще раз. – Haris

+1

Что такое 'tmp_buf'? Что делает 'SIZEOF'? –

+0

char tmp_buf [PKTSIZE]; #define SIZEOF sizeof – agnel

ответ

0

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

Смежные вопросы