【发布时间】: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 :我也听说过。如果操作人员真的想获得帮助,他需要将这些信息放在这里..