sockaddr_in необъявленный идентификатор - PullRequest
13 голосов
/ 02 февраля 2012

Я следую руководству 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, если это поможет?

Ответы [ 2 ]

27 голосов
/ 02 февраля 2012

Стандарт гласит:

Заголовок должен определять структуру sockaddr_in

Вы должны включить <netinet/in.h> и объявить sin следующим образом:

struct sockaddr_in sin;
^^^^^^

Чтобы узнать, зачем вам нужно ключевое слово struct, см. C FAQ . Короче говоря, нет никакого скрытого typedef в C.

5 голосов
/ 02 февраля 2012

Согласно ip (7) справочной странице, вам также необходимо

   #include <sys/socket.h>
   #include <netinet/in.h>
   #include <netinet/ip.h> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...