Radclient : received bad packet

Orestes Leal Rodríguez olealrd1981 at gmail.com
Sun Oct 6 18:54:24 CEST 2019


You have this code:

           reply = fr_packet_list_recv(pl, &rdset);
           if (!reply) {
                printf( "radclient: received bad packet: %s\n",strerror(errno));
                return -1;  /* bad packet */
Two things about it:

On the freeradius library: packet.c:908 (fr_packet_list_recv) there
are two possible
reasons that the function will return NULL (your case).

  1. pl OR rdset == NULL    (packet.c: if (!pl || !set) return NULL;)

  2. This doesn't hold (from packet.c):

		 start = pl->last_recv;
		 } while (start != pl->last_recv);

I would say that you have an issue with pl or rdset or pl->last_recv
is different than what freeradius expect.


I would actually suggest replacing:

> if ((bind(fd, (struct sockaddr *)&serveraddr, addrsize))<0)

by this:

> if ((bind(fd, (struct sockaddr *)&serveraddr, addrsize)) == -1)

>From bind(2) (POSIX.1)

       On success, zero is returned.  On error, -1 is returned, and
errno is set appropriately.


More information about the Freeradius-Users mailing list