原型为:
SetSocketOption( SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, 1);
第三个参数为什么要是 1 呢?原因是默认的值是 0 ,1表示打开这个选项。
那么还有多少这样的选项呢?答案是:很多,有200项左右。
于是有了下面的代码,它可以看一看你使用socket时每个option的默认值。知道了这些,你就
可以有的放矢的SetSocketOption()了。
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("\t\t num \tLevel Name\t DefaultOption");
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("\t NULL\t ");
}
catch(ArgumentException)
{
Console.Write("\t NULL\t ");
}
catch(SocketException)
{
Console.Write(" \tNULL \t");
}
}
}
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();
}
}
}
{
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("\t\t num \tLevel Name\t DefaultOption");
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("\t NULL\t ");
}
catch(ArgumentException)
{
Console.Write("\t NULL\t ");
}
catch(SocketException)
{
Console.Write(" \tNULL \t");
}
}
}
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();
}
}
}
下面是屏幕截图