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

[入库:2005年8月18日] [更新:2007年3月25日]

本文简介:选择自 skygg 的 blog

 最近写一些在网络上捕获数据包的程序,用到了rawsocket,其中要用到setsocketoption()
原型为:setsocketoption(socketoptionlevel.ip,socketoptionname.headerincluded, 1);
第三个参数为什么要是 1 呢?原因是默认的值是 0 ,1表示打开这个选项。
那么还有多少这样的选项呢?答案是:很多,有200项左右。
于是有了下面的代码,它可以看一看你使用socket时每个option的默认值。知道了这些,你就
可以有的放矢的setsocketoption()了。

code:

---------------------------------------------------------------------------

namespace sky.socketoptions
{
 using system;
 using system.net.sockets;
 public class socketoptions
 {
  public static void main(string[] args)
  {
   int count = 0;
   //使用那种构造函数并不重要,何值也不重要,无非是clr分配一些相关的结构
   //结构是重要的
   socket socket = new socket(addressfamily.internetwork, sockettype.raw, protocoltype.ip);
          
   type sol = typeof(socketoptionlevel);
   type son = typeof(socketoptionname);
   console.writeline("\tnum\tlevel\tname\t\tdefaultoption");
   console.writeline("----------------------------------------------------------------");
   
   foreach(string s1 in enum.getnames(sol))
   {
    foreach( string s2 in enum.getnames(son))
    {
     count++;
    try
    {
     socketoptionlevel o1 = (socketoptionlevel)enum.parse(sol,s1);
     socketoptionname o2 = (socketoptionname)enum.parse(son,s2);
     console.write("\t{0}\t{1:-10}\t{2:-30}",count,s1,s2);
     //get values
     console.write("\t\t{0}\n",socket.getsocketoption(o1,o2));
    }
    catch(argumentnullexception)
    {
     console.write("\tnull\n");
    }
    catch(argumentexception)
    {
     console.write("\tnull\n");
    }
    catch(socketexception)
    {
     console.write("\tnull\n");
    }
   }

   }
   console.writeline("----------------------------------------------------------------");
   /*
   console.writeline("-------------socketoptionlevel---------------------------");
   foreach ( string s1 in enum.getnames(sol))
   {
   console.writeline( "{0}",s1);
   }
   console.writeline("-------------socketoptionname----------------------------");
   foreach( string s2 in enum.getnames(son))
   {
   console.writeline( "|{0}",s2);
   }
   console.writeline("------------------end------------------------------------");
   */
   console.readline();
  }
 }
}

---------------------------------------------------
下面是屏幕截图:

屏幕截图

本文关键:得到本机socket选项的全部默认值。
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top