Defina o endereço IP usando SIOCSIFADDR ioctl

Estou tentando obter e definir o endereço IP usando a interface IOCTL no Linux. Consigo obtê-lo e configurá-lo com êxito. Quando defino o endereço IP,ifconfig eth0 mostra um endereço IP adequado, mas o sistema é desconectado. ou seja, o sistema não pode ser pingado. Aqui está o meu código para definir o endereço IP. Informe-me se estiver faltando alguma coisa.

struct ifreq ifr;
in_addr_t in_addr;
struct sockaddr_in sin;

memset(&ifr, 0, sizeof(struct ifreq));
memset(&sin, 0, sizeof(struct sockaddr_in));
sockfd = socket(AF_INET, SOCK_STREAM, 0);
sprintf(ifr.ifr_name, "eth0");
in_addr = inet_addr("192.168.101.17");
sin.sin_addr.s_addr = in_addr;
memcpy(&ifr.ifr_addr, &sin, sizeof(struct sockaddr));
io = ioctl(sockfd, SIOCSIFADDR, (char *)&ifr);

questionAnswers(2)

yourAnswerToTheQuestion