`
coffee_hc
  • 浏览: 8781 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

SocketOptions属性的使用解读

阅读更多
1.       
TCP_NODELAY:

Nagle 算法。

2.       
SO_TIMEOUT:
ServerSocket.accept();
SocketInputStream.read(); DatagramSocket.receive(); 选项必须在进入阻塞操作前设置才能生效。

3.       
SO_SNDBUF:

       解读:这个发送缓冲区不要与nagle的缓冲区大小认为是同一个东西,其实nagle的最大缓冲区是有MTU来决定的。其实这个属性在windows平台下是设置了内核缓冲区的大小,linux下我还不知道。在win平台上该值默认为8K,这个值设置过小的话会导致数据包发送非常频繁,原因么可以参考一下这篇文章http://blog.163.com/coffee_hc/blog/static/4485331920114921715294/ (很早以前看到的一篇文章,都不知道原文地址了)
       
SO_REUSEADDR

       解读:其实就是端口重用,为什么要使用这个属性是因为操作系统在关闭连接的时候端口并不是马上释放掉,因为可能还有一些数据没有接受完成,所以再下一次再绑定该端口的时候会导致失败,它的使用场景主要就是在服务器程序关闭后马上启动一个新的服务的时候,这个时候需要设置该属性,否则很大几率会导致绑定端口失败。
       
SO_RCVBUF

         解读:这个接受缓冲区和SO_SNDBUF相反,当大传输量的时候则需要大一点的缓冲区这样可以提高传输速度,但是对应信息量非常小的则可以使用小一点的缓冲区确保数据的及时处理。
       
SO_OOBINLINE

         解读:无。暂时没有用到需要使用的情况,也没有使用案例,所以暂时不做解读。
       
SO_LINGER

         解读:由于在调用了close()方法之后,程序默认会检查是否还有数据没有接受或者发送完,有的话是需要将这些数据处理完再关闭释放端口。但是人的忍耐是有限度的,不能守夜的大叔要关门了你们还在他妈的加班,所以必须有超时时间,到了时间就强制都赶出门。
       
SO_KEEPALIVE

keepalive 选项时,如果在 2 个小时(注:实际值与实现有关)内在任意方向上都没有跨越套接字交换数据,则 TCP 会自动将 keepalive 探头发送到同位体。

9.       
SO_BROADCAST

解读:用于开启或关闭广播地址上组播功能,当然这个也要在网络环境支持。
   
SO_BINDADDR

解读:这个值是只读的,虽然有set方法支持,但是并不能设置值的,因为绑定的地址在服务器启动的时候就已经定了,是不能改变的,所以这只是一个只读方法。

11.   
IP_TOS

解读:这个其实是IP协议中的类型定义标志位,google了一下也没发现有用的答案,参考了rfc791发现其实这个实际上是8个字节的组合,具体的每一位的含义可以参http://www.rfc-editor.org/rfc/rfc791.txt里面介绍的,其实就是标识这个IP包的数据处理的优先级的标志位(至少我看下来是这种理解),具体使用的时候还是参考协议更准确。
   
IP_MULTICAST_LOOP
         API说明:此选项启用或禁用多播数据报的本地回送。

13.   
IP_MULTICAST_IF,IP_MULTICAST_IF2

解读:这个主要是在机器上有多个网络接口(应该是网卡驱动)中选择需要网卡发送多播包。其实这个只需要用bind方法指定IP就可以做到了。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics