<div dir="ltr">Here is the proposed change.  See attached files.<div><br></div><div>I'm not too familiar with sending diffs so let me know if I didn't send it in the expected format.</div></div><div class="gmail_extra">

<br clear="all"><div><div dir="ltr"><b style="font-family:arial,sans-serif;font-size:13px;background-color:rgb(255,255,255)">Jonathan Gagnon</b><br style="color:rgb(136,136,136);font-family:arial,sans-serif;font-size:13px;background-color:rgb(255,255,255)">

<span style="font-family:arial,sans-serif;font-size:13px;background-color:rgb(255,255,255)">Architecte d'application / Application Architect</span><div><div>600, boulevard Armand-Frappier, bureau 200</div><div>Laval (Québec) H7V 4B4 </div>

<div>Canada</div><div><div>T : 450-662-6101 poste 234</div><div><font size="1"><a href="http://www.croesus.com" target="_blank"><img src="http://www.croesus.com/images/signature/Croesus-Logo.jpg"></a><br></font></div><div>

<a href="http://www.facebook.com/pages/Croesus-Finansoft/345020305606240" target="_blank"><img src="http://www.croesus.com/images/signature/facebook32.png"></a><a href="http://www.linkedin.com/company/croesus-finansoft?trk=hb_tab_compy_id_26141" target="_blank"><img src="http://www.croesus.com/images/signature/linkedin32.png"></a><a href="https://twitter.com/CroesusFin" target="_blank"><img src="http://www.croesus.com/images/signature/twitter32.png"></a><br>

</div><div><a></a><br></div></div></div></div></div>
<br><br><div class="gmail_quote">On Wed, Jan 22, 2014 at 5:15 PM, "Andrés G. Aragoneses" <span dir="ltr"><<a href="mailto:knocte@gmail.com" target="_blank">knocte@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div class="HOEnZb"><div class="h5">On 22/01/14 22:32, Jonathan Gagnon wrote:<br>
> I found a leak in TcpListener.AcceptTcpClient :<br>
><br>
> public TcpClient AcceptTcpClient ()<br>
> {<br>
> if (!active)<br>
> throw new InvalidOperationException ("Socket is not listening");<br>
><br>
> Socket clientSocket = server.Accept ();<br>
><br>
> TcpClient client = new TcpClient();  // this call creates a socket even<br>
> though we don't need it<br>
> // use internal method SetTcpClient to make a<br>
> // client with the specified socket<br>
> client.SetTcpClient (clientSocket);  // This method leaks the socket<br>
> created by the default constructor.<br>
><br>
> return client;<br>
> }<br>
><br>
><br>
> The method calls the default TcpClient constructor which creates a new<br>
> socket.  SetTcpClient is then called to assign the accepted socket to<br>
> the TcpClient object.  The problem is that the SetTcpClient simply<br>
> replaces the old socket reference by the new without closing the old<br>
> socket.  The result is that the socket created by the default<br>
> constructor remains until the GC reclaims it.<br>
><br>
> The fix would be really easy.  Instead of calling the default TcpClient<br>
> constructor, a new constructor could be created taking the socket as<br>
> parameter.  We would then avoid creating and leaking a socket every time<br>
> the method is called.  The fixed method would look like this :<br>
><br>
> public TcpClient AcceptTcpClient ()<br>
> {<br>
> if (!active)<br>
> throw new InvalidOperationException ("Socket is not listening");<br>
><br>
> Socket clientSocket = server.Accept ();<br>
><br>
> TcpClient client = new TcpClient(clientSocket);<br>
><br>
> return client;<br>
> }<br>
><br>
><br>
> I could create a fix with the proposed solution.  Any thoughts?<br>
<br>
</div></div>Propose your solution as diff format please, it's much easier to<br>
understand and review.<br>
<br>
<br>
_______________________________________________<br>
Mono-devel-list mailing list<br>
<a href="mailto:Mono-devel-list@lists.ximian.com">Mono-devel-list@lists.ximian.com</a><br>
<a href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a><br>
</blockquote></div><br></div>