bind: Cannot assign requested address

本文记录了一次socket编程中bind函数出现“Cannot assign requested address”错误的排查过程。作者通过研究发现,问题在于使用了不必要的 htonl 函数转换 IP 地址。

今天写了一段socket代码,大致是这样的:

        struct sockaddr_in cliaddr;

        inet_aton("192.168.2.12", &addr);

        cliaddr.sin_family      = AF_INET;
        cliaddr.sin_addr.s_addr = htonl(addr.s_addr);
        cliaddr.sin_port        = htons(5000);


        if(bind(sockfd, (const struct sockaddr *)&cliaddr, sizeof(cliaddr)) == -1)
        {
                perror("bind failed\n");
        }
执行时,总报错:

 Cannot assign requested address

花了比较多的时间,也没找出原因。

后来在网上搜了下,才知道,原来 函数 inet_aton已经把IP地址保存为network order了,所以不需要再用htonl()转了。

其实inet_aton()的man里面说的很清楚的。

       inet_aton() converts the Internet host address cp from  the  IPv4  num‐
       bers-and-dots  notation  into  binary  form (in network byte order) and
       stores it in the structure that inp  points  to. 
以后还是要仔细了解每个函数的具体作用啊。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值