Unix网络编程学习笔记课后题(Chapter 3)

3.1
因为不同类型的套接字长度不同。IPV4和IPV6套接字长度固定,但Unix域结构和数据链路结构是可变长度的,需要一个参数记录结果的大小,直接传就是值传递了,需要传一个指针,以实现引用传递。

3.2
void指针只能用来传参数,不能对void类型指针加减和解引用

3.3
匆匆忙忙按自己的理解写了下, 也不知道对不对。。先这样吧

#include "../lib/unp.h"
#include <string.h>
int inet_pton_loose(int family, const char* strptr, void* addrptr){
        if(family==AF_INET){
                int res;
                if((res=inet_pton(family, strptr, addrptr)<=0)){
                        printf("inet_pton failed, IPV4 address is %s\n",strptr);
                        struct in_addr inaddr;
                        if(inet_aton(strptr, &inaddr)){
                                memcpy(addrptr, &inaddr, sizeof(struct in_addr));
                                return 1;
                        }
                        return 0;
                }
                return 1;
        }
        else if(family==AF_INET6){
                int res;
                if((res=inet_pton(family, strptr, addrptr)<=0)){
                        printf("inet_pton failed, IPV4 address is %s\n",strptr);
                        struct in_addr inaddr;
                        if(inet_aton(strptr, &inaddr)){
                                memcpy(addrptr, &inaddr, sizeof(struct in_addr));
                                return 1;
                        }
                        return 0;
                }
                return 1;
        }
        return 0;
}

int main(int argc, char** argv){
        if(argc<3){
                printf("input format: ./main <family> <address>\n");
                return 1;
        }
        in_addr_t addr;
        bzero(&addr,sizeof(in_addr_t));
        int res;
        if(strcmp(argv[1],"AF_INET")==0){
                printf("IPV4 used: convert is preparing\n");
                res=inet_pton_loose(AF_INET,argv[2],(void*)&addr);
        }
        else if(strcmp(argv[1],"AF_INET6")==0){
                printf("IPV6 used: convert is preparing\n");
                res=inet_pton_loose(AF_INET6,argv[2],(void*)&addr);
        }
        printf("%d %08x\n",res,addr);
        return 0;
}

猜你喜欢

转载自blog.csdn.net/Ethan95/article/details/84900258
今日推荐