Подтвердить что ты не робот

Неизвестный идентификатор 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, если это вообще помогает?

4b9b3361

Ответ 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>