繁体中文
设为首页
加入收藏
当前位置:.Net技术首页 >> 评论及其它 >> 得到本机socket选项的全部默认值

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

2004-10-01 08:26:10  作者:  来源:互联网  浏览次数:4  文字大小:【】【】【
简介:最近写一些在网络上捕获数据包的程序,用到了RawSocket,其中要用到SetSocketOption() 原型为:SetSocketOption(SocketOptionLevel.IP,SocketOptionName.HeaderIncluded, 1); 第三个参数为什么要是 1 呢?原因是默...
关键字:本机 全部 socket

最近写一些在网络上捕获数据包的程序,用到了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();

}

}

}

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

责任编辑:admin
相关文章