得到本机socket选项的全部默认值。

 最近写一些在网络上捕获数据包的程序,用到了RawSocket,其中要用到SetSocketOption()
原型为:
     SetSocketOption( SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, 1);
第三个参数为什么要是 1 呢?原因是默认的值是 0 ,1表示打开这个选项。
那么还有多少这样的选项呢?答案是:很多,有200项左右。
于是有了下面的代码,它可以看一看你使用socket时每个option的默认值。知道了这些,你就
可以有的放矢的SetSocketOption()了。
None.gif namespace  SKY.SocketOptions
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
using System;
InBlock.gif    
using System.Net.Sockets;
InBlock.gif    
public class SocketOptions
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
public static void Main(string[] args)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
int count = 0
InBlock.gif            
//使用那种构造函数并不重要,何值也不重要,无非是CLR分配一些相关的结构
InBlock.gif            
//结构是重要的
InBlock.gif
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
InBlock.gif           
InBlock.gif            Type sol 
= typeof(SocketOptionLevel);
InBlock.gif            Type son 
= typeof(SocketOptionName);
InBlock.gif            Console.WriteLine(
"\t\t num \tLevel Name\t DefaultOption");
InBlock.gif            Console.WriteLine(
"----------------------------------------------------------------");
InBlock.gif            
InBlock.gif            
foreach(string s1 in Enum.GetNames(sol))
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
foreachstring s2 in Enum.GetNames(son))
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    count
++;
InBlock.gif                
try
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    SocketOptionLevel o1 
= (SocketOptionLevel)Enum.Parse(sol,s1);
InBlock.gif                    SocketOptionName o2 
= (SocketOptionName)Enum.Parse(son,s2);
InBlock.gif                    Console.Write(
" \t{0}\t {1:-10}\t {2:-30}",count,s1,s2);
InBlock.gif                    
//Get Values
InBlock.gif
                    Console.Write(" \t\t{0}\n ",socket.GetSocketOption(o1,o2));
ExpandedSubBlockEnd.gif                }

InBlock.gif                
catch(ArgumentNullException)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    Console.Write(
"\t NULL\t ");
ExpandedSubBlockEnd.gif                }

InBlock.gif                
catch(ArgumentException)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    Console.Write(
"\t NULL\t ");
ExpandedSubBlockEnd.gif                }

InBlock.gif                
catch(SocketException)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    Console.Write(
" \tNULL \t");
ExpandedSubBlockEnd.gif                }

ExpandedSubBlockEnd.gif            }

InBlock.gif
ExpandedSubBlockEnd.gif            }

InBlock.gif            Console.WriteLine(
"----------------------------------------------------------------");
ExpandedSubBlockStart.gifContractedSubBlock.gif            
/**//*
InBlock.gif            Console.WriteLine("-------------SocketOptionLevel---------------------------");
InBlock.gif            foreach ( string s1 in Enum.GetNames(sol))
InBlock.gif            {
InBlock.gif            Console.WriteLine( "{0}",s1);
InBlock.gif            }
InBlock.gif            Console.WriteLine("-------------SocketOptionName----------------------------");
InBlock.gif            foreach( string s2 in Enum.GetNames(son))
InBlock.gif            {
InBlock.gif            Console.WriteLine( "|{0}",s2);
InBlock.gif            }
InBlock.gif            Console.WriteLine("------------------END------------------------------------");
ExpandedSubBlockEnd.gif            
*/

InBlock.gif            Console.ReadLine();
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

下面是屏幕截图
socketoption.JPG

转载于:https://www.cnblogs.com/xpoint/archive/2004/07/10/22962.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值