winsock定义的socket缓冲区大小与getsockopt获取到的socket缓冲区大小差2倍

detective0922 2014-06-22 06:43:58
大家好,最近遇到一个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倍,这是为什么呢?请大家帮忙看看,谢谢先!
...全文
395 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
worldy 2014-06-24
  • 打赏
  • 举报
回复
引用 4 楼 detective0922 的回复:
[quote=引用 2 楼 worldy 的回复:] 大家好,最近遇到一个socket 发送的问题,在这个过程中顺便学习了一下关于socket缓冲区的知识,在这里有一个疑问: 我在winsock2.h里查看到SO_SNDBUF和SO_RCVBUF的定义如下: #define SO_SNDBUF 0x1001 /* send buffer size */ #define SO_RCVBUF 0x1002 /* receive buffer size */ 两者大小为4k左右 //这个说法从哪来的?
谢谢答复,我是这样理解的,0x1001和0x1002转换成十进制是4097和4098,为4k左右,不知道我理解的是否正确?[/quote] 那只是两个常亮代表两个不同的函数功能,不是缓冲区大小
detective0922 2014-06-23
  • 打赏
  • 举报
回复
引用 6 楼 fishion 的回复:
[quote=引用 4 楼 detective0922 的回复:] [quote=引用 2 楼 worldy 的回复:] 大家好,最近遇到一个socket 发送的问题,在这个过程中顺便学习了一下关于socket缓冲区的知识,在这里有一个疑问: 我在winsock2.h里查看到SO_SNDBUF和SO_RCVBUF的定义如下: #define SO_SNDBUF 0x1001 /* send buffer size */ #define SO_RCVBUF 0x1002 /* receive buffer size */ 两者大小为4k左右 //这个说法从哪来的?
谢谢答复,我是这样理解的,0x1001和0x1002转换成十进制是4097和4098,为4k左右,不知道我理解的是否正确?[/quote] 错了,那两个是标识,不是大小[/quote] 多谢,看来确实是我理解错了!那再请教一下,socket缓冲区的默认大小为8K,这个是在哪里定义的?
fishion 2014-06-23
  • 打赏
  • 举报
回复
引用 4 楼 detective0922 的回复:
[quote=引用 2 楼 worldy 的回复:] 大家好,最近遇到一个socket 发送的问题,在这个过程中顺便学习了一下关于socket缓冲区的知识,在这里有一个疑问: 我在winsock2.h里查看到SO_SNDBUF和SO_RCVBUF的定义如下: #define SO_SNDBUF 0x1001 /* send buffer size */ #define SO_RCVBUF 0x1002 /* receive buffer size */ 两者大小为4k左右 //这个说法从哪来的?
谢谢答复,我是这样理解的,0x1001和0x1002转换成十进制是4097和4098,为4k左右,不知道我理解的是否正确?[/quote] 错了,那两个是标识,不是大小
detective0922 2014-06-23
  • 打赏
  • 举报
回复
引用 3 楼 fishion 的回复:
默认的接收和发送缓冲区大小是8K
谢谢答复,从获取到的值看,确实是8K,但定义里的 #define SO_SNDBUF 0x1001 /* send buffer size */ #define SO_RCVBUF 0x1002 /* receive buffer size */ 这个该如何理解?我的理解是0x1001和0x1002转换成十进制是4097和4098,按理为4k左右 是不是我理解得不对?
detective0922 2014-06-23
  • 打赏
  • 举报
回复
引用 2 楼 worldy 的回复:
大家好,最近遇到一个socket 发送的问题,在这个过程中顺便学习了一下关于socket缓冲区的知识,在这里有一个疑问: 我在winsock2.h里查看到SO_SNDBUF和SO_RCVBUF的定义如下: #define SO_SNDBUF 0x1001 /* send buffer size */ #define SO_RCVBUF 0x1002 /* receive buffer size */ 两者大小为4k左右 //这个说法从哪来的?
谢谢答复,我是这样理解的,0x1001和0x1002转换成十进制是4097和4098,为4k左右,不知道我理解的是否正确?
fishion 2014-06-23
  • 打赏
  • 举报
回复
默认的接收和发送缓冲区大小是8K
worldy 2014-06-23
  • 打赏
  • 举报
回复
大家好,最近遇到一个socket 发送的问题,在这个过程中顺便学习了一下关于socket缓冲区的知识,在这里有一个疑问: 我在winsock2.h里查看到SO_SNDBUF和SO_RCVBUF的定义如下: #define SO_SNDBUF 0x1001 /* send buffer size */ #define SO_RCVBUF 0x1002 /* receive buffer size */ 两者大小为4k左右 //这个说法从哪来的?
detective0922 2014-06-23
  • 打赏
  • 举报
回复
自己顶顶,大家帮忙看看~
detective0922 2014-06-23
  • 打赏
  • 举报
回复
多谢楼上的几位,为了表示感谢,帖子加到100分了,结贴了!
shenyi0106 2014-06-23
  • 打赏
  • 举报
回复
socket缓冲区的默认大小为8K,这个是在哪里定义的? windows内核文件中定义的,在提供给开发者的SDK中,这个定义不提供。 有兴趣可以看一下linux内核中的tcpip协议栈(windows和它一样),这里面有相关的8k缓冲区的定义
赵4老师 2014-06-23
  • 打赏
  • 举报
回复
相应的.h文件里面。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧