【发布时间】:2010-05-04 12:15:03
【问题描述】:
getnameinfo 原型的第二个参数要求 socklen_t 类型,但 sizeof 使用 size_t。那么如何获得 socklen_t 呢?
原型:
int getnameinfo(const struct sockaddr *restrict sa, socklen_t salen,
char *restrict node, socklen_t nodelen, char *restrict service,
socklen_t servicelen, int flags);
例子:
struct sockaddr_in SIN;
memset(&SIN, 0, sizeof(SIN)); // This should also be socklen_t ?
SIN.sin_family = AF_INET;
SIN.sin_addr.s_addr = inet_addr(IP);
SIN.sin_port = 0;
getnameinfo((struct sockaddr *)&SIN, sizeof(SIN) /* socklen_t */, BUFFER, NI_MAXHOST, NULL, 0, 0);
这会产生编译错误:
socklen_t VAR;
getnameinfo((struct sockaddr *)&SIN, &VAR, BUFFER, NI_MAXHOST, NULL, 0, 0);
【问题讨论】:
-
sizeof本身是否会导致问题? -
您是否遇到编译错误?
-
没有问题或编译器错误,但我猜如果 getnameinfo 要求 socklen_t 我不应该通过 size_t...
-
生活中有更糟糕的事情需要担心。我从未见过对此感到困扰的套接字代码。
-
我总是提供原型所要求的东西。最佳实践。
标签: c linux networking posix socklen-t