Я пытался написать код проверки ICMP на C.
Следующий код работает очень хорошо:
int main(){
struct sockaddr_in addr;
hname = gethostbyname("192.168.1.5");
bzero(&addr, sizeof(addr));
addr.sin_addr.s_addr = *(long*)hname->h_addr;
ping(&addr);
}
void ping(struct sockaddr_in *addr){
sendto(sd,&pckt,sizeof(pckt),0,(struct sockaddr*)addr,sizeof(*addr))
}
Но когда я удалил параметр функции ping следующим образом, компиляция не удалась.
int main(){
ping();
}
void ping(){
struct sockaddr_in addr;
hname = gethostbyname("192.168.1.5");
bzero(&addr, sizeof(addr));
addr.sin_addr.s_addr = *(long*)hname->h_addr;
sendto(sd,&pckt,sizeof(pckt),0,(struct sockaddr*)addr,sizeof(*addr))
}
Ошибка была: error: invalid type argument of unary ‘*’ (have ‘struct sockaddr_in’)
Когда я удалил функцию * в sendto (), она по-прежнему компилировала ошибку как:
error: conversion to non-scalar type requested
Кстати, я создал struct sockaddr_in в функции ping (), потому что мне нужно выполнять несколько процессов и избегать использования одной и той же структуры несколькими процессами.