首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >socket.h (_uid32_t)错误

socket.h (_uid32_t)错误
EN

Stack Overflow用户
提问于 2011-05-12 10:30:30
回答 1查看 1.2K关注 0票数 2

我正在尝试套接字编程,我需要一些帮助,因为我无法构建我所编写的任何程序。每当我试图构建任何套接字应用程序时,编译器都会报告以下错误:

错误:预期说明符-限定符-在“_uid32_t”之前列出

这个变量位于一个struct中,该结构又位于头文件"socket.h“中,如下所示:

代码语言:javascript
复制
struct ucred {
  pid_t         pid;
  __uid32_t     uid;
  __gid32_t     gid;
};

其他文件中没有任何其他错误,这是编译器返回的唯一错误。

我不知道这是否有任何意义,但头文件是与cygwin一起提供的,因为指南和教程使用的是Unix套接字,并且正在运行Windows。还使用代码::块运行gcc编译器。

我真的希望能够在Windows上使用Unix套接字API运行一个程序,因为我真的不想只局限于winsock。此外,大多数关于套接字和网络编程的免费和全面的教程都使用Unix套接字。

这是代码,不过我并不认为这真的很重要,因为无论程序如何,只要使用socket.h,都会得到完全相同的错误。

代码语言:javascript
复制
#include <stdio.h>
#include <string.h>
#include <sys\types.h>
#include <sys\socket.h>
#include <netdb.h>
#include <arpa\inet.h>

int main(int argc, char *argv[])
{
    struct addrinfo hints, *res, *p;
    int status;
    char ipstr[INET6_ADDRSTRLEN];

    if (argc != 2)
    {
        fprintf(stderr, "Usage: showip hostname\n");
        return 1;
    }

    memset(&hints, 0, sizeof hints);

    hints.ai_family = AF_UNSPEC;//AF_INET or AF_INET6 to force version
    hints.ai_socktype = SOCK_STREAM;

    if ((status = getaddrinfo(argv[1], NULL, &hints, &res)) != 0)
    {
        fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(status));
        return 2;
    }

    printf("IP addresses for %s:\n\n", argv[1]);

    for (p = res; p != NULL; p = p ->ai_next)
    {
        void *addr;
        char *ipver;

        //get the pointer to the address itself
        //different fields in IPv4 and IPv6:
        if (p ->ai_family == AF_INET)
        {
            //IPv4
            struct sockaddr_in *ipv4 = (struct sockaddr_in *)p ->ai_addr;
            addr = &(ipv4 ->sin_addr);
            ipver = "IPv4";
        }
        else//IPv6
        {
            struct sockaddr_in *ipv6 = (struct sockaddr_in6 *)p ->ai_addr;
            ipver = "IPv6";
        }
        //convert the IP to a string and print it;
        inet_ntop(p ->ai_family, addr, ipstr, sizeof ipstr);
        printf(" %s: %s\n", ipver, ipstr);
    }

    freeaddrinfo(res);//free linked list

    return 0;
}

我还可以添加其他程序的其他源代码,但我选择了这个,因为我是从互联网上获得的,而不是教科书,这样任何人都可以查找这里

EN

回答 1

Stack Overflow用户

发布于 2011-05-12 10:41:34

尝试在你的<unistd.h><sys/types.h>之前加入socket.h

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5976650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档