我正在尝试套接字编程,我需要一些帮助,因为我无法构建我所编写的任何程序。每当我试图构建任何套接字应用程序时,编译器都会报告以下错误:
错误:预期说明符-限定符-在“_uid32_t”之前列出
这个变量位于一个struct中,该结构又位于头文件"socket.h“中,如下所示:
struct ucred {
pid_t pid;
__uid32_t uid;
__gid32_t gid;
};其他文件中没有任何其他错误,这是编译器返回的唯一错误。
我不知道这是否有任何意义,但头文件是与cygwin一起提供的,因为指南和教程使用的是Unix套接字,并且正在运行Windows。还使用代码::块运行gcc编译器。
我真的希望能够在Windows上使用Unix套接字API运行一个程序,因为我真的不想只局限于winsock。此外,大多数关于套接字和网络编程的免费和全面的教程都使用Unix套接字。
这是代码,不过我并不认为这真的很重要,因为无论程序如何,只要使用socket.h,都会得到完全相同的错误。
#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;
}我还可以添加其他程序的其他源代码,但我选择了这个,因为我是从互联网上获得的,而不是教科书,这样任何人都可以查找这里。
发布于 2011-05-12 10:41:34
尝试在你的<unistd.h>和<sys/types.h>之前加入socket.h。
https://stackoverflow.com/questions/5976650
复制相似问题