2016-05-08 7 views
0

私は以下のexample codeを使ってサーバをコーディングしようとしていますが、特にこれらの記述に問題があります。CソケットプログラミングのAccept()

int Accept(int s, struct sockaddr *addr, socklen_t *addrlen) 
{ 
    int rc; 

    if ((rc = accept(s, addr, addrlen)) < 0) 
      unix_error("Accept error"); 
     return rc; 
} 
... 

socklen_t clientlen = sizeof(struct sockaddr_storage); 
int connectFd = Accept(listenfd, (SA *)&clientaddr, &clientlen) 

私はSAを使用した場合、それは次のように言って、エラーを引き上げます:

server.c:175:36: error: ‘SA’ undeclared (first use in this function) 
    connectFd = accept(listenFd, (SA * )&clientaddr, &c); 

server.c:175:36: note: each undeclared identifier is reported only once for each function it appears in server.c:175:40: error: 
expected expression before ‘)’ token 
    connectFd = accept(listenFd, (SA *) &clientaddr, &c); 
server.c:175:18: error: too few arguments to function ‘accept’ 
    connectFd = accept(listenFd, (SA *)&clientaddr, &c); 

は、この問題を解決する方法はありますか?

+3

私はデータ型として 'SA'を見たことがありませんPOSIXまたはCの標準コンテキストのいずれかで指定します。どうやら、それは 'csapp.h'ヘッダファイルのものです。どのように定義されていますか?それはマクロですか? – Downvoter

+0

リンクの例のため、clientaddrのデータ型は "struct sockaddr_storage"です。それをキャストすることは安全でしょうか? – user287474

+0

ああ、私はいくつかの掘りをしてみましょう。 – user287474

答えて

1

SAは、あなたのプログラムで定義されていないタイプ、コンパイラはそれを見つけることができなかった、あなたのプログラムに次のtypedefを追加する必要があります

typedef struct sockaddr SA; 
関連する問題