Export (0) Print
Expand All

Socket::NoDelay Property

Gets or sets a Boolean value that specifies whether the stream Socket is using the Nagle algorithm.

Namespace:  System.Net.Sockets
Assembly:  System (in System.dll)

public:
property bool NoDelay {
	bool get ();
	void set (bool value);
}

Property Value

Type: System::Boolean
false if the Socket uses the Nagle algorithm; otherwise, true. The default is false.

ExceptionCondition
SocketException

An error occurred when attempting to access the Socket. See the Remarks section for more information.

ObjectDisposedException

The Socket has been closed.

The Nagle algorithm is designed to reduce network traffic by causing the socket to buffer small packets and then combine and send them in one packet under certain circumstances. A TCP packet consists of 40 bytes of header plus the data being sent. When small packets of data are sent with TCP, the overhead resulting from the TCP header can become a significant part of the network traffic. On heavily loaded networks, the congestion resulting from this overhead can result in lost datagrams and retransmissions, as well as excessive propagation time caused by congestion. The Nagle algorithm inhibits the sending of new TCP segments when new outgoing data arrives from the user if any previouslytransmitted data on the connection remains unacknowledged.

The majority of network applications should use the Nagle algorithm.

Setting this property on a User Datagram Protocol (UDP) socket will have no effect.

The following code example demonstrates the use of the NoDelay 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("");
}

.NET Framework

Supported in: 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

.NET for Windows Phone apps

Supported in: Windows Phone 8.1, Windows Phone Silverlight 8.1, Windows Phone Silverlight 8

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Show:
© 2014 Microsoft