我想使用sendto()发送视频和音频UDP多播数据包,我使用getsockopt(context_data->socket,SOL_SOCKET, SO_SNDBUF, &bufsize, &size);获得发送缓冲区的大小为114688,但是实际上当我发送的数据包还不到这个值的时候(大约大于65536时就会失败),就会发送失败,返回值-1,消息为message too long.
在网上搜了一下说,出现这个错误时,应该手动设置发送缓冲区的大小为所发数据包的最大值,于是我就使用setsockopt()将发送缓冲区的大小设置为200000,这时我再使用getsockopt()获得发送缓冲区的大小为262142,并不是我所希望设置的值,并且这时发送大的数据包时仍然会出错。我所设置的发送缓冲区的大小并没有起到作用。
真的不知到这是为什么,求高手指点一下,这到底是怎么回事?
我使用的系统是ubuntu 11.04,我在ubuntu 11.10上的结果是一样的。
我用来设置socket的代码:
unsigned char *output_buffer = (unsigned char*)av_malloc(IO_BUFFER_SIZE);
if (NULL == output_buffer) {
printf("Couldn't allocate input buffer.\n");
return NULL;
}
output_context_data_t *context_data = (output_context_data_t *)malloc(sizeof(output_context_data_t));
if (NU