关于网友提出的“ winsock定义的socket缓冲区大小与getsockopt获取到的socket缓冲区大小差2倍”问题疑问,本网通过在网上对“ winsock定义的socket缓冲区大小与getsockopt获取到的socket缓冲区大小差2倍”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: winsock定义的socket缓冲区大小与getsockopt获取到的socket缓冲区大小差2倍
描述: 大家好,最近遇到一个socket 发送的问题,在这个过程中顺便学习了一下关于socket缓冲区的知识,在这里有一个疑问:
我在winsock2.h里查看到SO_SNDBUF和SO_RCVBUF的定义如下:
#define SO_SNDBUF 0x1001 /* send buffer size */
#define SO_RCVBUF 0x1002 /* receive buffer size */
两者大小为4k左右
但我在程序里用getsockopt获取这两个值的大小时
if (getsockopt(m_pListenContext->m_Socket,
SOL_SOCKET,
SO_SNDBUF,
(char*)&optVal,
&optLen) != SOCKET_ERROR)
pirnt("SockOpt Sendbuff Value: %d\n", optVal);
if (getsockopt(m_pListenContext->m_Socket,
SOL_SOCKET,
SO_RCVBUF,
(char*)&optVal,
&optLen) != SOCKET_ERROR)
pirnt("SockOpt Recvbuff Value: %d\n", optVal);
返回的值却都是8196,是定义的2倍,这是为什么呢?请大家帮忙看看,谢谢先!
解决方案1: socket缓冲区的默认大小为8K,这个是在哪里定义的?
windows内核文件中定义的,在提供给开发者的SDK中,这个定义不提供。
有兴趣可以看一下linux内核中的tcpip协议栈(windows和它一样),这里面有相关的8k缓冲区的定义
解决方案2: 相应的.h文件里面。
解决方案3:
错了,那两个是标识,不是大小
解决方案4: 大家好,最近遇到一个socket 发送的问题,在这个过程中顺便学习了一下关于socket缓冲区的知识,在这里有一个疑问:
我在winsock2.h里查看到SO_SNDBUF和SO_RCVBUF的定义如下:
#define SO_SNDBUF 0x1001 /* send buffer size */
#define SO_RCVBUF 0x1002 /* receive buffer size */
两者大小为4k左右 //这个说法从哪来的?
以上介绍了“ winsock定义的socket缓冲区大小与getsockopt获取到的socket缓冲区大小差2倍”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2943977.html