Понимание htonl () и ntohl ()

Я пытаюсь использовать unix-сокеты для проверки отправки некоторых пакетов udp на localhost.

Насколько я понимаю, при настройке IP-адреса и порта для отправки пакетов я бы заполнилsockaddr_inсо значениями, преобразованными в порядок байтов сети. Я на OSX, и я удивлен, что это

printf("ntohl: %d\n", ntohl(4711));
printf("htonl: %d\n", htonl(4711));
printf("plain: %d\n", 4711);

Печать

ntohl: 1729232896
htonl: 1729232896
plain: 4711

Так что ни одна из функций на самом деле не возвращает обычное значение. Я бы ожидал увидеть либо результаты, отличающиеся, так как x86 является прямым порядком байтов (afaik), либо совпадение с фактическим числом 4711. Очевидно, я не понимаю, чтоhtonl а такжеntohl и их варианты делают. Что мне не хватает?

Соответствующий код такой:

int main(int argc, char *argv[])
{
   if (argc != 4)
   {
      fprintf(stderr, "%s\n", HELP);
      exit(-1);
   }

   in_addr_t rec_addr = inet_addr(argv[1]); // first arg is '127.0.0.1'
   in_port_t rec_port = atoi(argv[2]);      // second arg is port number
   printf("Address is %s\nPort is %d\n", argv[1], rec_port);
   char* inpath = argv[3];

   char* file_buf;
   unsigned long file_size = readFile(inpath, &file_buf); // I am trying to send a file
   if (file_size > 0)
   {
      struct sockaddr_in dest;
      dest.sin_family      = AF_INET;
      dest.sin_addr.s_addr = rec_addr; // here I would use htons
      dest.sin_port        = rec_port;
      printf("ntohs: %d\n", ntohl(4711));
      printf("htons: %d\n", htonl(4711));
      printf("plain: %d\n", 4711);
      int socket_fd = socket(AF_INET, SOCK_DGRAM, 0);
      if (socket_fd != -1)
      {
         int error;
         error = sendto(socket_fd, file_buf, file_size + 1, 0, (struct sockaddr*)&dest, sizeof(dest));
         if (error == -1)
            fprintf(stderr, "%s\n", strerror(errno));
         else printf("Sent %d bytes.\n", error);
      }
   }

   free(file_buf);
   return 0;
}

Ответы на вопрос(4)

Ваш ответ на вопрос