Chinaunix首页 | 论坛 | 博客
  • 博客访问: 642234
  • 博文数量: 108
  • 博客积分: 46
  • 博客等级: 民兵
  • 技术积分: 1279
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-16 11:36
个人简介

坐井以观天

文章分类

全部博文(108)

文章存档

2014年(13)

2013年(90)

2012年(6)

分类:

2013-07-03 09:25:05

TCP在建立连接的时候,SYN分节会相互通告窗口,此窗口就是TCP内核的缓冲区大小,通常要求其为MSS的偶数倍。
 
为了充分利用TCP连接,需要估计TCP连接的传输速度和RTT值,得到在网络上传输的字节流大小,通过SO_RCVBUF和SO_SNDBUF可以查看本地socket的发送和接受缓冲区大小。
 
SO_RCVLOWAT和SO_SNDLOWAT 表示本地TCP接受low water,如果接受的字节大于该值,内核将其标识为可读;如果发送缓冲区的可用空间大于SO_SNDLOWAT,内核将其标识为可写;一般该值缺省为2048字节。
 
具体可查看UNIX网络编程P165。
 
 

  char sock_rcv_buf_size[MAXHOSTNAMELEN];
  int len = sizeof(sock_rcv_buf_size);
  acceptor.get_option(SOL_SOCKET, SO_RCVBUF, sock_rcv_buf_size, &len);
  sock_rcv_buf_size[len] = 0;
  ACE_DEBUG((LM_DEBUG,
             ACE_TEXT ("(%P|%t) Receive buffer size %d %d \n"),
             *(int*)sock_rcv_buf_size, len));


这几行代码可以在ACE上查看缓冲区大小,搞不明白的是,ACE将get_option的第三个参数改成了char*,这样需要自己根据类型做转换。

在WinXP上,接收缓冲区8192字节,发送缓冲区64512字节。

TCP/UDP所返回的缓冲区大小是一致的。

阅读(2971) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~