<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://ultibo.org/mediawiki_ultibo_org/index.php?action=history&amp;feed=atom&amp;title=TTCPSendBuffer</id>
		<title>TTCPSendBuffer - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://ultibo.org/mediawiki_ultibo_org/index.php?action=history&amp;feed=atom&amp;title=TTCPSendBuffer"/>
		<link rel="alternate" type="text/html" href="https://ultibo.org/mediawiki_ultibo_org/index.php?title=TTCPSendBuffer&amp;action=history"/>
		<updated>2026-04-06T00:25:33Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.26.1</generator>

	<entry>
		<id>https://ultibo.org/mediawiki_ultibo_org/index.php?title=TTCPSendBuffer&amp;diff=4340&amp;oldid=prev</id>
		<title>Ultibo at 01:48, 30 May 2018</title>
		<link rel="alternate" type="text/html" href="https://ultibo.org/mediawiki_ultibo_org/index.php?title=TTCPSendBuffer&amp;diff=4340&amp;oldid=prev"/>
				<updated>2018-05-30T01:48:46Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&#039;diff diff-contentalign-left&#039;&gt;
				&lt;col class=&#039;diff-marker&#039; /&gt;
				&lt;col class=&#039;diff-content&#039; /&gt;
				&lt;col class=&#039;diff-marker&#039; /&gt;
				&lt;col class=&#039;diff-content&#039; /&gt;
				&lt;tr style=&#039;vertical-align: top;&#039; lang=&#039;en&#039;&gt;
				&lt;td colspan=&#039;2&#039; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&#039;2&#039; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 01:48, 30 May 2018&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l398&quot; &gt;Line 398:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 398:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! Socket Timing&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! Socket Timing&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| For each sent segment a notification is scheduled for the socket thread to check the socket in TCP_RETRY_TIMEOUT[Segment.Count] milliseconds. This is to ensure that the segment is retried if not acknowledged by that time.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| For each sent segment a notification is scheduled for the socket thread to check the socket in TCP_RETRY_TIMEOUT[Segment.Count] milliseconds. This is to ensure that the segment is retried if not acknowledged by that time.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;br /&amp;gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;For each sent segment that has a following segment a notification is sent to the socket thread to check the socket immediately. This ensures that all acceptable segments are sent immediately.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;br /&amp;gt;&lt;/del&gt;For each sent segment that has a following segment a notification is sent to the socket thread to check the socket immediately. This ensures that all acceptable segments are sent immediately.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br /&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br /&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br /&amp;gt;For each retried segment a notification is also scheduled for the socket thread to check the socket in TCP_RETRY_TIMEOUT[Segment.Count] milliseconds which will be the next retry time if still not acknowledged.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br /&amp;gt;For each retried segment a notification is also scheduled for the socket thread to check the socket in TCP_RETRY_TIMEOUT[Segment.Count] milliseconds which will be the next retry time if still not acknowledged.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Ultibo</name></author>	</entry>

	<entry>
		<id>https://ultibo.org/mediawiki_ultibo_org/index.php?title=TTCPSendBuffer&amp;diff=4339&amp;oldid=prev</id>
		<title>Ultibo: Created page with &quot;Return to Unit TCP   __TOC__  === Description === ----  &#039;&#039;To be documented&#039;&#039;  === Class definitions === ----   &lt;div class=&quot;toccolours mw-collapsible mw-collapsed&quot;...&quot;</title>
		<link rel="alternate" type="text/html" href="https://ultibo.org/mediawiki_ultibo_org/index.php?title=TTCPSendBuffer&amp;diff=4339&amp;oldid=prev"/>
				<updated>2018-05-30T01:47:14Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;Return to &lt;a href=&quot;/wiki/Unit_TCP&quot; title=&quot;Unit TCP&quot;&gt;Unit TCP&lt;/a&gt;   __TOC__  === Description === ----  &amp;#039;&amp;#039;To be documented&amp;#039;&amp;#039;  === Class definitions === ----   &amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Return to [[Unit_TCP|Unit TCP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=== Description ===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;To be documented&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
=== Class definitions ===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;border: 1; font-family: arial;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;TTCPSendBuffer = class(TSocketBuffer)&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot; style=&amp;quot;text-align: left; padding-left: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 14px; background: white;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;constructor Create(ASocket:TTransportSocket);&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;width: 50%;&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;destructor Destroy; override;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&amp;lt;div style=&amp;quot;font-family: monospace,courier;&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;private&amp;#039;&amp;#039;&amp;#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;FFirst:PTCPSegment;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Pointer to First Segment&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;FLast:PTCPSegment;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Pointer to Last Segment&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;function AddSegment(ASequence:LongWord; AFlags:Byte; ASize:Word):PTCPSegment;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;function RemoveSegment(ASegment:PTCPSegment):Boolean;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;procedure FlushSegments(All:Boolean);&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&amp;lt;div style=&amp;quot;font-family: monospace,courier;&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;protected&amp;#039;&amp;#039;&amp;#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;procedure SetSize(ASize:LongWord); override;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&amp;lt;div style=&amp;quot;font-family: monospace,courier;&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;public&amp;#039;&amp;#039;&amp;#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;StartSequence:LongWord;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Initial Sequence number of Local (ISS)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;NextSequence:LongWord;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Next Sequence number to Send (SND.NXT&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LastSequence:LongWord;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Last Sequence number in Buffer&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LastAcknowledge:LongWord;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Last Acknowledged number from Remote (SND.UNA) &lt;br /&gt;
Note: LastAcknowledge is the NextSequence that Remote expects to Receive or the first Unacknowledged Sequence number. If LastAcknowledge equals NextSequence all segments have been Acknowledged LastSequence is the last sequence in our buffer to send. If NextSequence equals LastSequence there is no more data to send.&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;UrgentPointer:LongWord;&amp;lt;/code&amp;gt;&lt;br /&gt;
| (SND.UP)&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;MaxSeg:Word;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Remote Max Segment Size (Learned from Remote)&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;WindowSize:LongWord;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Remote Window Size (SND.WND)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;WindowScale:Byte;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Remote Window Scale&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;WindowTimeout:Int64;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Timeout for probing small/zero Window&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;CongestionWindow:Word;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Slow Start Window Size&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SynSequence:LongWord;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Sequence number of our SYN&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;FinSequence:LongWord;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Sequence number of our FIN&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;WindowSequence:LongWord;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Sequence number of last Window update (SND.WL1)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;WindowAcknowledge:LongWord;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Acknowledge number of last Window update (SND.WL2)&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;NoPush:Boolean;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Disable Push on final segment&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;NoSack:Boolean;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Selective Ack not in use&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;NoNagle:Boolean;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Nagle not in use&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;VjSa:LongWord;&amp;lt;/code&amp;gt;&lt;br /&gt;
| VJ&amp;#039;s alg, standard average&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;VjSd:LongWord;&amp;lt;/code&amp;gt;&lt;br /&gt;
| VJ&amp;#039;s alg, standard deviation&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;VjLast:LongWord;&amp;lt;/code&amp;gt;&lt;br /&gt;
| VJ&amp;#039;s alg, last transmit time&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;function CheckIdle:Boolean;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;function SynAcknowledged:Boolean;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;function FinAcknowledged:Boolean;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;function TestAcknowledge(AAcknowledge:LongWord):Boolean;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;function CheckAcknowledge(AAcknowledge:LongWord):Boolean;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;function ValidateAcknowledge(AAcknowledge:LongWord):Boolean;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;function WriteData(var ABuffer; ASize,AFlags:Integer):Boolean;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;function Finish:Boolean;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;function Synchronize:Boolean;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;function ReadSegment(var ASequence:LongWord; var AUrgent:Word; var AFlags:Byte; var AData:Pointer; var ASize:Word; AForce:Boolean):Boolean;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;function AcknowledgeSegments(ASequence,AAcknowledge:LongWord; AWindow:Word):Boolean;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;function TimestampSegment(AOptions:Pointer; var AOffset:Word):Boolean;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;function SelectiveAckSegments(AOptions:Pointer; var AOffset:Word; ASize:Byte):Boolean;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt; &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Function declarations ===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;border: 0; padding-bottom:0px;&amp;quot;&amp;gt;constructor TTCPSendBuffer.Create;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: 14px; padding-left: 12px;&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;Description:&amp;#039;&amp;#039;&amp;#039; To be documented&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot; style=&amp;quot;text-align: left; padding-left: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 14px; background: white;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Note&lt;br /&gt;
| None documented&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;border: 0; padding-bottom:0px;&amp;quot;&amp;gt;destructor TTCPSendBuffer.Destroy;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: 14px; padding-left: 12px;&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;Description:&amp;#039;&amp;#039;&amp;#039; To be documented&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot; style=&amp;quot;text-align: left; padding-left: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 14px; background: white;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Note&lt;br /&gt;
| None documented&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;border: 0; padding-bottom:0px;&amp;quot;&amp;gt;function TTCPSendBuffer.AddSegment(ASequence:LongWord; AFlags:Byte; ASize:Word):PTCPSegment;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: 14px; padding-left: 12px;&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;Description:&amp;#039;&amp;#039;&amp;#039; Adds a new Segment as the last segment in the list&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot; style=&amp;quot;text-align: left; padding-left: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 14px; background: white;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Sequence&lt;br /&gt;
| Sequence is the start sequence&lt;br /&gt;
|-&lt;br /&gt;
! Size&lt;br /&gt;
| Size can be zero&lt;br /&gt;
Size should not include the SYN and FIN sequence&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;border: 0; padding-bottom:0px;&amp;quot;&amp;gt;function TTCPSendBuffer.RemoveSegment(ASegment:PTCPSegment):Boolean;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: 14px; padding-left: 12px;&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;Description:&amp;#039;&amp;#039;&amp;#039; Removes the passed Segment from the list&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot; style=&amp;quot;text-align: left; padding-left: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 14px; background: white;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Note&lt;br /&gt;
| None documented&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;border: 0; padding-bottom:0px;&amp;quot;&amp;gt;procedure TTCPSendBuffer.FlushSegments(All:Boolean);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: 14px; padding-left: 12px;&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;Description:&amp;#039;&amp;#039;&amp;#039; Removes ACKed Segments from the buffer (or All)&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot; style=&amp;quot;text-align: left; padding-left: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 14px; background: white;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Note&lt;br /&gt;
| None documented&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;border: 0; padding-bottom:0px;&amp;quot;&amp;gt;procedure TTCPSendBuffer.SetSize(ASize:LongWord);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: 14px; padding-left: 12px;&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;Description:&amp;#039;&amp;#039;&amp;#039; To be documented&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot; style=&amp;quot;text-align: left; padding-left: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 14px; background: white;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Size&lt;br /&gt;
| Size cannot be set smaller than the default or existing&lt;br /&gt;
|-&lt;br /&gt;
! Note&lt;br /&gt;
| For TCP setting the size does not clear existing segments&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;border: 0; padding-bottom:0px;&amp;quot;&amp;gt;function TTCPSendBuffer.CheckIdle:Boolean;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: 14px; padding-left: 12px;&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;Description:&amp;#039;&amp;#039;&amp;#039; Check if all data in the send buffer has been sent and acknowledged&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot; style=&amp;quot;text-align: left; padding-left: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 14px; background: white;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Note&lt;br /&gt;
| None documented&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;border: 0; padding-bottom:0px;&amp;quot;&amp;gt;function TTCPSendBuffer.SynAcknowledged:Boolean;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: 14px; padding-left: 12px;&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;Description:&amp;#039;&amp;#039;&amp;#039; Test if a SYN has been sent and if it has been ACKed&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot; style=&amp;quot;text-align: left; padding-left: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 14px; background: white;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Note&lt;br /&gt;
| None documented&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;border: 0; padding-bottom:0px;&amp;quot;&amp;gt;function TTCPSendBuffer.FinAcknowledged:Boolean;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: 14px; padding-left: 12px;&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;Description:&amp;#039;&amp;#039;&amp;#039; Test if a FIN has been sent and if it has been ACKed&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot; style=&amp;quot;text-align: left; padding-left: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 14px; background: white;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Note&lt;br /&gt;
| None documented&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;border: 0; padding-bottom:0px;&amp;quot;&amp;gt;function TTCPSendBuffer.TestAcknowledge(AAcknowledge:LongWord):Boolean;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: 14px; padding-left: 12px;&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;Description:&amp;#039;&amp;#039;&amp;#039; Tests an Acknowledge for invalidity&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot; style=&amp;quot;text-align: left; padding-left: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 14px; background: white;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Note&lt;br /&gt;
| If SEG.ACK =&amp;lt; ISS, or SEG.ACK &amp;gt; SND.NXT then the ACK is unacceptable&lt;br /&gt;
Only ever used when Socket is in SYN_SENT state&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;border: 0; padding-bottom:0px;&amp;quot;&amp;gt;function TTCPSendBuffer.CheckAcknowledge(AAcknowledge:LongWord):Boolean;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: 14px; padding-left: 12px;&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;Description:&amp;#039;&amp;#039;&amp;#039; Checks an Acknowledge for validity&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot; style=&amp;quot;text-align: left; padding-left: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 14px; background: white;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Note&lt;br /&gt;
| If SND.UNA =&amp;lt; SEG.ACK =&amp;lt; SND.NXT then the ACK is acceptable&lt;br /&gt;
Only ever used when Socket is in SYN_REC state&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;border: 0; padding-bottom:0px;&amp;quot;&amp;gt;function TTCPSendBuffer.ValidateAcknowledge(AAcknowledge:LongWord):Boolean;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: 14px; padding-left: 12px;&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;Description:&amp;#039;&amp;#039;&amp;#039; Checks an Acknowledge for validity&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot; style=&amp;quot;text-align: left; padding-left: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 14px; background: white;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Note&lt;br /&gt;
| If the ACK acks something not yet sent (SEG.ACK &amp;gt; SND.NXT) then send an ACK&lt;br /&gt;
Used when Socket is in any of the Synchronized states&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;border: 0; padding-bottom:0px;&amp;quot;&amp;gt;function TTCPSendBuffer.WriteData(var ABuffer; ASize,AFlags:Integer):Boolean;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: 14px; padding-left: 12px;&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;Description:&amp;#039;&amp;#039;&amp;#039; Used by Send/SendTo to Write data into the buffer ready for Sending&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot; style=&amp;quot;text-align: left; padding-left: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 14px; background: white;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Flags&lt;br /&gt;
| Flags is for MSG_PEEK and MSG_OOB when applicable&lt;br /&gt;
|-&lt;br /&gt;
! Note&lt;br /&gt;
| Data that will not fit in the Buffer is simply discarded&lt;br /&gt;
Send coalescing is handled here by checking Last segment&lt;br /&gt;
&amp;lt;br /&amp;gt;Push flag is set on the last written segment of user data&lt;br /&gt;
|-&lt;br /&gt;
! Socket Timing&lt;br /&gt;
| Whenever data is written to the buffer a notification is sent to the socket thread to check the socket immediately. This ensures that the segment is sent immediately if acceptable or otherwise will be sent when an acknowledge is received from the remote due to the Nagle algorithm.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;border: 0; padding-bottom:0px;&amp;quot;&amp;gt;function TTCPSendBuffer.Finish:Boolean;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: 14px; padding-left: 12px;&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;Description:&amp;#039;&amp;#039;&amp;#039; To be documented&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot; style=&amp;quot;text-align: left; padding-left: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 14px; background: white;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Socket Timing&lt;br /&gt;
| When the FIN segment is written to the buffer a notification is sent to the socket thread to check the socket immediately. This ensures that the segment will be sent to the remote either immediately or after the Nagle delay.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;border: 0; padding-bottom:0px;&amp;quot;&amp;gt;function TTCPSendBuffer.Synchronize:Boolean;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: 14px; padding-left: 12px;&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;Description:&amp;#039;&amp;#039;&amp;#039; To be documented&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot; style=&amp;quot;text-align: left; padding-left: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 14px; background: white;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Socket Timing&lt;br /&gt;
| When the SYN segment is written to the buffer a notification is sent to the socket thread to check the socket immediately. This ensures that the segment will be sent to the remote immediately.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;border: 0; padding-bottom:0px;&amp;quot;&amp;gt;function TTCPSendBuffer.ReadSegment(var ASequence:LongWord; var AUrgent:Word; var AFlags:Byte; var AData:Pointer; var ASize:Word; AForce:Boolean):Boolean;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: 14px; padding-left: 12px;&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;Description:&amp;#039;&amp;#039;&amp;#039; Used by Socket to Read segments to be (re)sent from queue&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot; style=&amp;quot;text-align: left; padding-left: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 14px; background: white;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Note&lt;br /&gt;
| Nagle Algorithm and Retry Timeouts are handled here&lt;br /&gt;
|-&lt;br /&gt;
! Socket Timing&lt;br /&gt;
| For each sent segment a notification is scheduled for the socket thread to check the socket in TCP_RETRY_TIMEOUT[Segment.Count] milliseconds. This is to ensure that the segment is retried if not acknowledged by that time.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;For each sent segment that has a following segment a notification is sent to the socket thread to check the socket immediately. This ensures that all acceptable segments are sent immediately.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;For each retried segment a notification is also scheduled for the socket thread to check the socket in TCP_RETRY_TIMEOUT[Segment.Count] milliseconds which will be the next retry time if still not acknowledged.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;If the remote Window is not large enough to send the next segment then a notification is scheduled for the socket thread to check the socket in TCP_WINDOW_TIMEOUT milliseconds to ensure that a window probe is sent at the appropriate time.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;border: 0; padding-bottom:0px;&amp;quot;&amp;gt;function TTCPSendBuffer.AcknowledgeSegments(ASequence,AAcknowledge:LongWord; AWindow:Word):Boolean;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: 14px; padding-left: 12px;&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;Description:&amp;#039;&amp;#039;&amp;#039; Used by Socket to Acknowledge segments that have been sent and update the Window&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot; style=&amp;quot;text-align: left; padding-left: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 14px; background: white;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Note&lt;br /&gt;
| Sequence, Acknowledge and Window are from the received Segment&lt;br /&gt;
|-&lt;br /&gt;
! Socket Timing&lt;br /&gt;
| For each acknowledged segment a notification is sent to the socket thread to check the socket immediately. This is to ensure that segments waiting to be sent due to the Nagle algorithm are sent on receipt of an acknowledge.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;border: 0; padding-bottom:0px;&amp;quot;&amp;gt;function TTCPSendBuffer.TimestampSegment(AOptions:Pointer; var AOffset:Word):Boolean;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: 14px; padding-left: 12px;&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;Description:&amp;#039;&amp;#039;&amp;#039; Used by Socket to Timestamp (RTT) segments that have been sent&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot; style=&amp;quot;text-align: left; padding-left: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 14px; background: white;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
| Offset points to the point to extract the timestamp option&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre style=&amp;quot;border: 0; padding-bottom:0px;&amp;quot;&amp;gt;function TTCPSendBuffer.SelectiveAckSegments(AOptions:Pointer; var AOffset:Word; ASize:Byte):Boolean;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: 14px; padding-left: 12px;&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;Description:&amp;#039;&amp;#039;&amp;#039; Used by Socket to Selective Ack segments that have been sent&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot; style=&amp;quot;text-align: left; padding-left: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 14px; background: white;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
| Offset points to the point to start extracting SACKS&lt;br /&gt;
|-&lt;br /&gt;
! Size&lt;br /&gt;
| Size includes the Option and Size&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Return to [[Unit_Reference|Unit Reference]]&lt;/div&gt;</summary>
		<author><name>Ultibo</name></author>	</entry>

	</feed>