【问题标题】:Accept() in C - Socket ProgrammingC 语言中的 Accept() - 套接字编程
【发布时间】:2016-05-08 10:23:44
【问题描述】:

我正在尝试使用以下 example code 编写服务器代码,但我在使用这些语句时遇到了问题。

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);

有没有办法解决这个问题?

【问题讨论】:

  • 我从未将SA 视为 POSIX 或 C 标准上下文中的数据类型。显然它来自csapp.h 头文件。它是如何定义的?是宏吗?
  • 因为链接的例子,clientaddr的数据类型是“struct sockaddr_storage”。投射它会安全吗?
  • 哦,我明白了,让我挖掘一下。
  • This 可能会有所帮助。
  • @Downvoter :我也听说过。如果操作人员真的想获得帮助,他需要将这些信息放在这里..

标签: c sockets


【解决方案1】:

你的程序中没有定义类型SA,编译器找不到它,你可能想在你的程序中添加以下typedef:

typedef struct sockaddr SA;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 2021-02-06
    • 1970-01-01
    • 2015-09-24
    • 1970-01-01
    • 2011-01-02
    相关资源
    最近更新 更多