В настоящее время я пишу небольшую программу на сервере UDP в Linux.UDP-сервер будет принимать пакеты от двух разных одноранговых узлов и будет выполнять разные операции в зависимости от того, от какого узла он получил пакет.Я пытаюсь определить источник, откуда я получаю пакет.Однако когда возвращается select
и вызывается recvfrom
, возвращается с ошибкой Недопустимый аргумент .Если я передам NULL в качестве второго последнего аргумента, recvfrom завершится успешно.
Я попытался объявить fromAddr как struct sockaddr_storage
, struct sockaddr_in
, struct sockaddr
безуспешно.Что-то не так с этим кодом?Это правильный способ определения источника пакета?
Ниже приведен фрагмент кода.
`
/*TODO : update for TCP. use recv */
if((pkInfo->rcvLen=recvfrom(psInfo->sockFd,
pkInfo->buffer,
MAX_PKTSZ,
0,
/* (struct sockaddr*)&fromAddr,*/
NULL,
&(addrLen)
)) < 0)
{
perror("RecvFrom failed\n");
}
else
{
/*Apply Filter */
#if 0
struct sockaddr_in* tmpAddr;
tmpAddr = (struct sockaddr_in* )&fromAddr;
printf("Received Msg From %s\n",inet_ntoa(tmpAddr->sin_addr));
#endif
printf("Packet Received of len = %d\n",pkInfo->rcvLen);
}
`