2011-05-12 3 views
2

소켓 프로그래밍시 손을 잡으려고하는데 필자가 작성한 프로그램을 작성할 수 없기 때문에 도움이 필요합니다. 내가 어떤 소켓 응용 프로그램을 빌드하려고 할 때마다, 컴파일러는 다음 오류를보고합니다socket.h (_uid32_t) error

error: expected specifier-qualifier-list before '_uid32_t'

이 변수가 차례로 헤더 파일 "socket.h '에 위치한 구조체 내부에 있으며, 다음과 같습니다 :

struct ucred { 
    pid_t   pid; 
    __uid32_t  uid; 
    __gid32_t  gid; 
}; 

다른 파일에는 다른 오류가 없으며 이것은 컴파일러에서 반환하는 유일한 오류입니다.

이것이 어떤 결과인지는 모르겠지만, 가이드 및 튜토리얼이 유닉스 소켓에 있고 Windows XP를 실행하고 있기 때문에 헤더 파일이 cygwin과 함께 제공됩니다. 또한 Code :: Blocks를 사용하여 gcc 컴파일러를 실행합니다.

Windows에서 유닉스 소켓 API를 사용하여 프로그램을 실행할 수 있기를 정말로 바랄뿐입니다. 왜냐하면 저는 스스로를 winsock에만 국한시키는 것을 정말 싫어하기 때문입니다. 또한 소켓과 네트워크 프로그래밍에 관한 무료로 사용 가능한 포괄적 인 자습서의 대부분은 유닉스 소켓을 사용합니다.

여기에 코드가 있지만 실제로는 문제가 아니라고 생각합니다. 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; 
} 

가 내가 추가 할 수있는 다른 프로그램에서 다른 소스 코드이기도하지만 사람이 here를를 검색 할 수 있도록 내가 교과서를 인터넷에서 그것을 가지고하지 때문에 내가 대신 하나를 선택했다.

+0

include 문에 역 슬래시를 수정하십시오 ... –

답변

0

socket.h 앞에 <unistd.h><sys/types.h>을 포함 시키십시오.

+1

오류가 계속 발생합니다. –

+0

코드를 게시 할 수 있습니까? – leegent

+0

코드 –