Неизвестный идентификатор sockaddr_in
Я следую вместе с руководством beej по созданию сетей, и он идет ДЕЙСТВИТЕЛЬНО хорошим, потому что я все хорошо понимаю, и он прекрасно объясняет это. однако, когда я хочу проверить некоторые из классных вещей, которые он показывает мне, это не сработает!.: (
Я не уверен, где именно объявлен sockaddr_in, но, возможно, кто-то здесь поможет мне!
Вот что я до сих пор (тестирование преобразования ip в строковой форме на ip на 4 байтовый интеграл и наоборот):
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
int main(void)
{
sockaddr_in sin;
inet_pton(AF_INET, "192.168.2.1", &sin.in_addr);
char ip[INET_ADDRSTRLEN];
inet_ntop(AF_INET, &sin.in_addr, ip, INET_ADDRSTRLEN);
printf("%s\n", ip);
return 0;
}
Снова я совершенно не знаю, где все так, если это что-то действительно глупо с моей стороны, извините!
Изменить: я нахожусь в дистрибутиве Linux Debian под названием Mint, если это вообще помогает?
Ответы
Ответ 1
В стандарте говорится:
Заголовок должен определять структуру sockaddr_in
Вы должны включить <netinet/in.h>
и объявить sin
следующим образом:
struct sockaddr_in sin;
^^^^^^
Чтобы узнать, зачем вам нужно ключевое слово struct
, см. этот C FAQ. Короче говоря, там нет неявного typedef
в C.
Ответ 2
Согласно ip (7) странице man, вам также нужно
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>