IPv6学习-link-local addr使用

一、link-local addr使用方式

    1、 连接同一广播域内的其他主机的link-local addr或者本机的link-local addr,必须绑定本机的link-local addr,否则连接失败(syn包都发不出去);

    2、连接同一广播域内的其他主机的link-local addr时,scope id(ipv6%地址后面的内容)必须都要填写本机地址的scope id,否则connect失败(真正发送到网络上的包是不包含scope id的, scope id标识数据出口网卡)

   本机地址:fe80::73d2:59:8c52:586e%15,作为客户端

   

   对端地址:fe80::d9cf:27f:6a87:7fae%15,作为服务器

   

    

代码:

Connect("fe80::d9cf:27f:6a87:7fae%15", 9090, false, "fe80::73d2:59:8c52:586e%15", 0);

抓包:

分析:

对端的真实link_local addr:fe80::d9cf:27f:6a87:7fae%11,客户端连接时,使用此地址连接失败。必须使用fe80::d9cf:27f:6a87:7fae%15才能连接成功。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: [警告] 函数返回局部变量的地址 [-wreturn-local-addr] 这个警告表示函数返回了一个指向局部变量的地址,这是不安全的,因为当函数返回时,局部变量的内存空间会被释放,指向它的指针就会变成无效的。建议修改代码,避免返回局部变量的地址。 ### 回答2: 问题原因: 在C或C++语言中,当返回函数中声明的局部变量的地址时,编译器会发出一个警告:“function returns address of local variable [-wreturn-local-addr]”,这是因为局部变量的生命周期仅限于函数内部,出了函数作用域后就会被销毁,如果返回局部变量的地址则可能会导致未定义的行为。 解决方法: 1. 避免使用局部变量作为函数返回值,应该使用动态分配的内存或者将变量作为函数参数传递给调用函数处理。 2. 如果需要返回局部变量的地址,可以将其声明为static变量或者全局变量,在函数执行完后也能保证其存在,但需要注意static变量的作用域为文件作用域,可能会影响程序的可维护性和可读性。 3. 忽略这个警告,但需要开发者自行保证程序的正确性,确保返回的地址指向的内存空间在调用函数中不会被修改或者被释放。 4. 关闭编译器的警告,但不推荐这种做法,因为编译器的警告可以帮助开发者提前发现潜在的问题,提高程序的可靠性。 综上所述,正确地返回局部变量的地址需要开发者根据具体情况选择适当的解决方案,在确保程序正确性的同时避免不必要的警告信息。 ### 回答3: 该警告信息指出,在函数内部定义的局部变量被作为函数的返回值返回时,返回的是该局部变量的地址。然而,在函数结束时,局部变量所在的内存空间被释放,因此,返回的地址实际上已经无效或不可读取。 例如,在以下代码中,函数foo中定义了一个局部变量x,并返回了该变量的地址: ``` int *foo() { int x = 10; return &x; } ``` 在函数执行结束后,变量x所在的内存空间会被释放,因此返回的地址已经无效。如果在调用该函数后,继续使用该返回值,就会造成未定义的行为,包括程序崩溃、数据损坏等问题。 因此,编译器通常会针对这种情况发出警告信息,提示程序员注意潜在的错误。避免该问题的方法很简单,只需在函数内部使用动态内存分配函数(如malloc或new)动态分配内存,而不是使用局部变量。 以上是我对该警告信息的解释,希望对您有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值