你如何使用winsock2发送IPv6 jumbogram?

时间:2015-04-30 17:25:12

标签: c sockets network-programming winsock2

我一直想尝试数据报大小> 64k,但我坚持这个问题。我可以发布代码,如果它有用,但我根据这个优秀的例子更新了我的套接字代码以使用IPv6: http://cboard.cprogramming.com/networking-device-communication/67469-ipv6-multicast-example-code.html

之后我试图提高发送缓冲区大小,希望框架可以处理任何细节。我这样做了:

int buffsize = 1024*1024;
auto err = setsockopt(socket, SOL_SOCKET, SO_SNDBUF, (char*)&buffsize, sizeof(buffsize));

没有返回错误,当我在sndbuf大小上调用getsockopt()时,它报告了我设置的大小,但是尝试发送数据报> 64k只是导致了尺寸过大的错误。

我从阅读文档的理解是,要发送一个jumbogram,数据包头中的长度设置为0,并且有效负载大小放在IPv6逐跳选项头中。但是,我看不出怎么做。我试过通过这样做来尝试打开逐跳选项(我认为?):

int value(1);
auto err = setsockopt(mS, IPPROTO_IPV6, IPV6_HOPOPTS, (char *)&value, sizeof(value));

但只返回-1。当我调用getsockopt时,它不会返回任何错误,但会将传出长度值更改为0,所以我不知道这意味着什么。

作为调查这一点的一部分,我遇到的一些SO并没有让我得到答案:
Has anyone implemented a solution using UDP jumbograms?
Does Winsock support IPv6 extension headers?

0 个答案:

没有答案