struct hostent * hp; bzero((void*)addrp, sizeof(struct sockaddr_in)); hp = gethostbyname(hostname); //这个方法好像对于WSL是不行的 if(hp == NULL) return -1; bcopy((void *)hp->h_addr, (void *)&addrp->sin_addr, hp->h_length); //->的优先级高于&,学到了
时间: 2024-04-04 09:29:42 浏览: 112
Linux C中sockaddr和sockaddr_in的区别
5星 · 资源好评率100%
这段代码的作用是将主机名(hostname)转换为IP地址,并将IP地址填充到sockaddr_in结构体(addrp)中。具体实现如下:
1. 首先清空sockaddr_in结构体的内容,以便将新的地址信息填充进去。
2. 调用gethostbyname函数获取主机名对应的IP地址信息。该函数返回一个指向hostent结构体的指针,该结构体中包含了主机名、别名、地址类型以及地址信息等相关数据。
3. 如果gethostbyname函数返回了NULL,表示主机名无法解析,函数会返回-1。
4. 否则,使用bcopy函数将主机名对应的IP地址信息拷贝到sockaddr_in结构体中的sin_addr字段中。h_addr字段是hostent结构体中的一个地址指针,指向一个IP地址的字节序列,其长度由h_length字段指定。
5. 注意到代码中使用了bzero和bcopy函数,这两个函数是字符串处理函数,用于清空内存和拷贝内存。这里将它们用于清空和拷贝网络地址信息。在新版本的C语言标准中,建议使用memset和memcpy函数来替代它们。
阅读全文