har*_*rry 5 c sockets linux network-programming
我目前正在使用线程不安全的gethostbyname版本,该版本非常易于使用。您传递主机名,它返回我的地址结构。看起来在MT环境中,此版本使我的应用程序崩溃,因此尝试将其替换为gethostbyname_r。发现很难找到示例用法或任何好的文档。
有人使用过此gethostbyname_r方法吗?有任何想法吗 ?如何使用它以及如何处理其错误情况(如果有)。
该函数正在使用调用者提供的临时缓冲区。诀窍是处理ERANGE错误。
int rc, err;
char *str_host;
struct hostent hbuf;
struct hostent *result;
while ((rc = gethostbyname_r(str_host, &hbuf, buf, len, &result, &err)) == ERANGE) {
/* expand buf */
len *= 2;
void *tmp = realloc(buf, buflen);
if (NULL == tmp) {
free(buf);
perror("realloc");
}else{
buf = tmp;
}
}
if (0 != rc || NULL == result) {
perror("gethostbyname");
}
Run Code Online (Sandbox Code Playgroud)
编辑
根据最近的评论,我想你真正想要的是什么getaddrinfo。
| 归档时间: |
|
| 查看次数: |
10903 次 |
| 最近记录: |