Socket.Ttl Socket.Ttl Socket.Ttl Socket.Ttl Property

定义

获取或设置一个值,指定 Socket 发送的 Internet 协议 (IP) 数据包的生存时间 (TTL) 值。Gets or sets a value that specifies the Time To Live (TTL) value of Internet Protocol (IP) packets sent by the Socket.

public:
 property short Ttl { short get(); void set(short value); };
public short Ttl { get; set; }
member this.Ttl : int16 with get, set
Public Property Ttl As Short

属性值

TTL 值。The TTL value.

异常

TTL 值不能设置为负数。The TTL value can't be set to a negative number.

只有对于在 InterNetworkInterNetworkV6 族中的套接字,才可以设置此属性。This property can be set only for sockets in the InterNetwork or InterNetworkV6 families.

尝试访问套接字时出错。An error occurred when attempting to access the socket. 在尝试将 TTL 设置为大于 255 的值时,也将返回此错误。This error is also returned when an attempt was made to set TTL to a value higher than 255.

示例

下面的代码示例演示如何将Ttl属性。The following code example demonstrates the use of the Ttl property.

static void ConfigureTcpSocket(Socket^ tcpSocket)
{
     
    // Don't allow another socket to bind to this port.
    tcpSocket->ExclusiveAddressUse = true;
     
    // The socket will linger for 10 seconds after
    // Socket.Close is called.
    tcpSocket->LingerState = gcnew LingerOption(true, 10);
     
    // Disable the Nagle Algorithm for this tcp socket.
    tcpSocket->NoDelay = true;
     
    // Set the receive buffer size to 8k
    tcpSocket->ReceiveBufferSize = 8192;
     
    // Set the timeout for synchronous receive methods to
    // 1 second (1000 milliseconds.)
    tcpSocket->ReceiveTimeout = 1000;
     
    // Set the send buffer size to 8k.
    tcpSocket->SendBufferSize = 8192;
     
    // Set the timeout for synchronous send methods
    // to 1 second (1000 milliseconds.)
    tcpSocket->SendTimeout = 1000;
     
    // Set the Time To Live (TTL) to 42 router hops.
    tcpSocket->Ttl = 42;
    Console::WriteLine("Tcp Socket configured:");
    Console::WriteLine("  ExclusiveAddressUse {0}", 
        tcpSocket->ExclusiveAddressUse);
    Console::WriteLine("  LingerState {0}, {1}", 
        tcpSocket->LingerState->Enabled,
        tcpSocket->LingerState->LingerTime);
    Console::WriteLine("  NoDelay {0}",
        tcpSocket->NoDelay);
    Console::WriteLine("  ReceiveBufferSize {0}", 
        tcpSocket->ReceiveBufferSize);
    Console::WriteLine("  ReceiveTimeout {0}",
        tcpSocket->ReceiveTimeout);
    Console::WriteLine("  SendBufferSize {0}",
        tcpSocket->SendBufferSize);
    Console::WriteLine("  SendTimeout {0}",
        tcpSocket->SendTimeout);
    Console::WriteLine("  Ttl {0}",
        tcpSocket->Ttl);
    Console::WriteLine("  IsBound {0}",
        tcpSocket->IsBound);
    Console::WriteLine("");
}
static void ConfigureTcpSocket(Socket tcpSocket)
{
	// Don't allow another socket to bind to this port.
	tcpSocket.ExclusiveAddressUse = true;

	// The socket will linger for 10 seconds after 
                      // Socket.Close is called.
	tcpSocket.LingerState = new LingerOption (true, 10);

	// Disable the Nagle Algorithm for this tcp socket.
	tcpSocket.NoDelay = true;

	// Set the receive buffer size to 8k
	tcpSocket.ReceiveBufferSize = 8192;

	// Set the timeout for synchronous receive methods to 
	// 1 second (1000 milliseconds.)
	tcpSocket.ReceiveTimeout = 1000;

	// Set the send buffer size to 8k.
	tcpSocket.SendBufferSize = 8192;

	// Set the timeout for synchronous send methods
	// to 1 second (1000 milliseconds.)			
	tcpSocket.SendTimeout = 1000;

	// Set the Time To Live (TTL) to 42 router hops.
	tcpSocket.Ttl = 42;

	Console.WriteLine("Tcp Socket configured:");

	Console.WriteLine("  ExclusiveAddressUse {0}", 
				tcpSocket.ExclusiveAddressUse);

	Console.WriteLine("  LingerState {0}, {1}", 
			     tcpSocket.LingerState.Enabled, 
		             tcpSocket.LingerState.LingerTime);

	Console.WriteLine("  NoDelay {0}", 
                                              tcpSocket.NoDelay);

	Console.WriteLine("  ReceiveBufferSize {0}", 
				tcpSocket.ReceiveBufferSize);

	Console.WriteLine("  ReceiveTimeout {0}", 
				tcpSocket.ReceiveTimeout);

	Console.WriteLine("  SendBufferSize {0}", 
				tcpSocket.SendBufferSize);

	Console.WriteLine("  SendTimeout {0}", 
                                              tcpSocket.SendTimeout);

	Console.WriteLine("  Ttl {0}", 
                                              tcpSocket.Ttl);

                      Console.WriteLine("  IsBound {0}", 
                                              tcpSocket.IsBound);

	Console.WriteLine("");
}

注解

TTL 值指示的路由器数据包可以遍历路由器会丢弃该数据包和 Internet 控制消息协议 (ICMP)"超出 TTL"之前的最大数目的错误信息返回到发件人。The TTL value indicates the maximum number of routers the packet can traverse before the router discards the packet and an Internet Control Message Protocol (ICMP) "TTL exceeded" error message is returned to the sender.

TTL 值可能设置为值,从 0 到 255 之间。The TTL value may be set to a value from 0 to 255. 如果未设置此属性,套接字的默认 TTL 值为 32。When this property is not set, the default TTL value for a socket is 32.

如果尚未建立成功的连接使用套接字,传输控制协议 (TCP) 套接字上设置此属性是通过 TCP/IP 堆栈忽略。Setting this property on a Transmission Control Protocol (TCP) socket is ignored by the TCP/IP stack if a successful connection has been established using the socket.

如果你收到SocketException,使用SocketException.ErrorCode属性来获取特定错误代码。If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. 获取此代码后,请参阅Windows 套接字版本 2 API 错误代码有关错误的详细说明的文档。After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

适用于