2012-11-01 29 views
-1

我試圖讓簡單的服務器代碼的工作:編譯簡單UDP服務器使用鐺遇到錯誤:使用未聲明的標識符的「SA」

/* 
NAME:  udpServer0 
SYNOPSIS: udpServer0 
DESCRIPTION: The program creates a datagram socket in the inet 
       domain, binds it to port 12345 and receives any message 
       arrived to the socket and prints it out 
*/ 

#include <stdio.h> 
#include <sys/socket.h> 
#include <sys/types.h> 
#include <netinet/in.h> 

int main(void) 
{ 
    int sd; 
    struct sockaddr_in server; 
    char buf[512]; 
    int rc; 

    server.sin_family = AF_INET; 
    server.sin_addr.s_addr = htonl(INADDR_ANY); 
    server.sin_port = htons(12345); 

    sd = socket (AF_INET,SOCK_DGRAM,0); 

    bind(sd, (SA *) &server, sizeof(server)); 

    for(;;){ 
     rc=recv (sd, buf, sizeof(buf), 0); 
     buf[rc]= (char) NULL; 
     printf("Received: %s\n", buf); 
    } 
} 

我得到了這些錯誤:

clang udp_server.c     
udp_server.c:27:16: error: use of undeclared identifier 'SA' 
    bind(sd, (SA *) &server, sizeof(server)); 
      ^
udp_server.c:27:20: error: expected expression 
    bind(sd, (SA *) &server, sizeof(server)); 
       ^
2 errors generated. 

待辦事項我需要一些標題來避免這個問題?

+1

嘗試'struct sockaddr'而不是SA。後者不一定存在於任何系統頭文件中。 –

+0

@ n.m。我是套接字編程的新手,你能提供更多關於它的細節嗎? – mko

+0

'bind'需要'struct sockaddr *'類型的參數。 SA可能是這種類型的別名,它在您用作示例的程序中的某處定義。 –

回答

相關問題