我是ipv6和libcoap的新手。我正在使用" coap-server" libcoap中提供的示例用于测试我的coap客户端。我不能让coap-server持续到多播才能正常工作。我已经尝试了以下命令
add_action( 'woocommerce_checkout_update_order_meta', 'woocommerce_checkout_update_order_meta' );
function woocommerce_checkout_update_order_meta( $order_id ) {
$order = wc_get_order( $order_id );
$address = $order->get_billing_address_1();
update_post_meta( $order_id, '_alternative_paypal_email', $email );
}
add_filter( 'woocommerce_paypal_args', 'woocommerce_paypal_args', 10, 2 );
function woocommerce_paypal_args( $paypal_args, $order ) {
$email = get_post_meta( $order->get_id(), '_alternative_paypal_email', true );
if ( !empty( $email ) ) {
$paypal_args['business'] = $email;
}
return $paypal_args;
}
任何人都可以帮我吗?感谢。
答案 0 :(得分:1)
查看Linux source code文件source/net/ipv6/ipv6_sockglue.c
,此检查决定是否返回“协议错误”错误代码:
retv = -EPROTO;
if (inet_sk(sk)->is_icsk)
break;
因此,如果套接字是面向连接的(例如TCP套接字),代码将返回错误。
看起来libcoap打开了两个地址系列(IPv4和IPv6)的套接字,用于UDP和TCP以及它们的安全版本(分别是DTLS和TLS)。
因此,您可能需要更改示例以迭代所有打开的CoAP端点并找到IPv6 UDP端点(我没有看到任何命令行选项。所以,而不是使用第一个当前端点这里:
setsockopt(ctx->endpoint->sock.fd, IPPROTO_IPV6, IPV6_JOIN_GROUP, (char *)&mreq, sizeof(mreq));
你应该迭代所有打开的,并检查proto
字段和地址系列是否匹配
coap_endpoint_t *ep = ctx->endpoint;
while (ep != NULL && ep->proto != COAP_PROTO_UDP
&& /* TODO: check address family */) {
ep = ep->next;
}
if (ep != NULL) {
result = setsockopt(ep->sock.fd, IPPROTO_IPV6, IPV6_JOIN_GROUP, (char *)&mreq, sizeof(mreq));
}