<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Mike Flasko's Blog</title><link>http://blogs.msdn.com/mflasko/default.aspx</link><description>Development Ramblings</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>MIX08 and Astoria</title><link>http://blogs.msdn.com/mflasko/archive/2008/02/29/mix08-and-astoria.aspx</link><pubDate>Fri, 29 Feb 2008 23:52:17 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7966707</guid><dc:creator>mflasko</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mflasko/comments/7966707.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mflasko/commentrss.aspx?PostID=7966707</wfw:commentRss><description>&lt;p&gt;In a few days I'll be heading off to MIX08 with a few members of the Astoria team to check out all the cool work going on that is targeting the web and to give one of a few presentations on the ADO.NET Data Services Framework.&amp;#160; &lt;/p&gt;  &lt;p&gt;At MIX07 we discussed Astoria in the context of an incubation project and this year we'll show the production version of the bits and show some interesting integrations with Windows Live ..... &lt;a href="http://blogs.msdn.com/astoriateam/archive/2008/02/29/mix08-is-almost-here.aspx"&gt;check out my blog post to the Astoria team blog for details&lt;/a&gt;..&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;see you at MIX,&lt;/p&gt;  &lt;p&gt;Mike&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7966707" width="1" height="1"&gt;</description></item><item><title>Astoria Dec 2007 CTP is Released!</title><link>http://blogs.msdn.com/mflasko/archive/2007/12/11/astoria-dec-2007-ctp-is-released.aspx</link><pubDate>Tue, 11 Dec 2007 08:17:38 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6732611</guid><dc:creator>mflasko</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mflasko/comments/6732611.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mflasko/commentrss.aspx?PostID=6732611</wfw:commentRss><description>&lt;p&gt;My blog has been slow over the last few months, but this time its not because I haven't been blogging :). I've been busy posting about the new Astoria (newly renamed to ADO.NET Data Services) CTP.&amp;#160; &lt;/p&gt;  &lt;p&gt;Check out this post for where to get the latest Astoria bits from: &amp;quot;&lt;a title="ADO.NET Data Services ( Project Astoria ) CTP is Released" href="http://blogs.msdn.com/astoriateam/archive/2007/12/10/ado-net-data-services-project-astoria-ctp-is-released.aspx"&gt;ADO.NET Data Services ( Project Astoria ) CTP is Released&lt;/a&gt;&amp;quot;&lt;/p&gt;  &lt;p&gt;We've also started a blog series on the feature set of the CTP.&amp;#160; The first post I did in the series was on the authorization / validation infrastructure in the system.&amp;#160; You can check that out here: &amp;quot;&lt;a title="ADO.NET Data Services Dec2007 CTP - Validation and Access Control" href="http://blogs.msdn.com/astoriateam/archive/2007/12/10/ado-net-data-services-dec2007-ctp-validation-and-access-control.aspx"&gt;ADO.NET Data Services Dec2007 CTP - Validation and Access Control&lt;/a&gt;&amp;quot;&lt;/p&gt;  &lt;p&gt;We look forward to hearing what you think...&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;-Mike&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6732611" width="1" height="1"&gt;</description></item><item><title>Upcoming Astoria talks </title><link>http://blogs.msdn.com/mflasko/archive/2007/10/29/upcoming-astoria-talks.aspx</link><pubDate>Mon, 29 Oct 2007 15:15:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5766320</guid><dc:creator>mflasko</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mflasko/comments/5766320.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mflasko/commentrss.aspx?PostID=5766320</wfw:commentRss><description>&lt;P&gt;I'll be presenting an Astoria talk at the upcoming Dev Connections conference in Las Vegas and later in November at Dev Teach in Vancouver, BC.&amp;nbsp; If you are interested in chatting about Astoria, I'll be wondering around the conference most of the time.&amp;nbsp; See you there!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5766320" width="1" height="1"&gt;</description></item><item><title>Data Programmability and Astoria</title><link>http://blogs.msdn.com/mflasko/archive/2007/08/06/data-programmability-and-astoria.aspx</link><pubDate>Mon, 06 Aug 2007 15:15:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4261932</guid><dc:creator>mflasko</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mflasko/comments/4261932.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mflasko/commentrss.aspx?PostID=4261932</wfw:commentRss><description>&lt;P&gt;My blog has been silent for a while as I have been switching focus and moved from the Windows Networking group to the &lt;A class="" href="http://blogs.msdn.com/data/archive/2006/06/21/642023.aspx" mce_href="http://blogs.msdn.com/data/archive/2006/06/21/642023.aspx"&gt;Data Programmability (DP)&lt;/A&gt;&amp;nbsp;group in the SQL Server division at MS.&amp;nbsp; Currently, my main area of focus in DP is the &lt;A class="" href="http://astoria.mslivelabs.com/" mce_href="http://astoria.mslivelabs.com"&gt;Astoria&lt;/A&gt; project.&amp;nbsp; For an detailed&amp;nbsp;overview of Astoria, please see our team blog &lt;A class="" href="http://blogs.msdn.com/astoriateam/archive/2007/07/18/welcome.aspx" mce_href="http://blogs.msdn.com/astoriateam/archive/2007/07/18/welcome.aspx"&gt;here&lt;/A&gt;.&amp;nbsp; In short, Astoria is about providing simple and efficient&amp;nbsp;&lt;EM&gt;data services&lt;/EM&gt;&amp;nbsp;for todays web-enabled applicatoins:&amp;nbsp;T&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: Calibri; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-theme-font: minor-latin"&gt;he new wave of web applications are built on technologies such as AJAX and Microsoft Silverlight that enable developers to build better, richer user experiences. These technologies bring a shift in how applications are organized, including a stronger separation of presentation from data. &amp;nbsp;&amp;nbsp;The goal of Astoria is to enable applications to expose data as a &lt;EM&gt;data service&lt;/EM&gt; that can be consumed by web clients within a corporate network and across the internet. The data service is reachable over HTTP, and URIs are used to identify the various pieces of information available through the service. Interaction with the data service happens in terms of HTTP verbs such as GET, POST, PUT and DELETE, and the data exchanged in those interactions is represented in simple formats such as XML and JSON."&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: Calibri; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-theme-font: minor-latin"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: Calibri; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-theme-font: minor-latin"&gt;The components that make up the Astoria project are:&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: Calibri; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-theme-font: minor-latin"&gt;A set of downloadable bits that you can run on your web server to create you own Astoria services&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: Calibri; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-theme-font: minor-latin"&gt;A .net framework and Silverlight 1.1 client library that raise the abstraction from simple HTTP requests&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: Calibri; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-theme-font: minor-latin"&gt;An experimental online service (just released) that allows you to create your own 100MB Astoria data&amp;nbsp;service hosted by us&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: Calibri; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-theme-font: minor-latin"&gt;One of the interesting pieces of the Astoria design cycle is that we plan to be as transparent as possible.&amp;nbsp; Pablo, the Tech Lead on the team, explains what we mean by this pretty well on his blog.&amp;nbsp; He states: &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: Calibri; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-theme-font: minor-latin"&gt;&lt;EM&gt;"The technology and needs in the web space are broad and move fast. As we are building technology for that space with Project Astoria, we wanted to make sure we do it in a way that works well with the nature of the environment and the developer community we are targeting.&amp;nbsp; One of the things we'll try is to be as transparent as possible with the design process. Our plan is that as we discuss design issues in our design meetings, we will post the discussions on the Astoria Team blog as well. Not just the conclusions, but the discussions themselves, even before we made a call. We were also thinking of posting our regular meeting notes publicly as well."&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: Calibri; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-theme-font: minor-latin"&gt;&lt;EM&gt;&lt;/EM&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: Calibri; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-theme-font: minor-latin"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: Calibri; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-theme-font: minor-latin"&gt;Cheers&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: Calibri; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-theme-font: minor-latin"&gt;Mike&lt;/P&gt;&lt;/SPAN&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4261932" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mflasko/archive/tags/Astoria/default.aspx">Astoria</category></item><item><title>Survey: Calling All Layered Service Provider (LSP) Developers</title><link>http://blogs.msdn.com/mflasko/archive/2007/02/07/survey-calling-all-layered-service-provider-lsp-developers.aspx</link><pubDate>Wed, 07 Feb 2007 19:11:48 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1621174</guid><dc:creator>mflasko</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mflasko/comments/1621174.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mflasko/commentrss.aspx?PostID=1621174</wfw:commentRss><description>&lt;p&gt;Ok, this will conclude my string of survey posts (I promise).&amp;nbsp; &lt;/p&gt; &lt;p&gt;As we plan future additions and changes to Winsock LSPs and, more broadly, network filtering on Windows, we would like your input on the good, the so-so and ugly of Winsock LSP development and deployment.&amp;nbsp; Please take a few minutes to share your feedback with us.&amp;nbsp; Each response will be directly reviewed by the LSP team and used to help share the future direction of network filtering.&lt;/p&gt; &lt;p&gt;The survey can be accessed &lt;a href="http://connect.microsoft.com/WNDP/Survey/Survey.aspx?SurveyID=3260"&gt;here&lt;/a&gt;&lt;/p&gt; &lt;p&gt;NOTE: The survey is anonymous, unless you choose to "opt-in" and provide your contact information&lt;/p&gt; &lt;p&gt;Cheers,&lt;br&gt;Mike&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1621174" width="1" height="1"&gt;</description></item><item><title>Survey: Network Developement on Windows</title><link>http://blogs.msdn.com/mflasko/archive/2007/02/07/survey-network-developement-on-windows.aspx</link><pubDate>Wed, 07 Feb 2007 17:45:08 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1620764</guid><dc:creator>mflasko</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mflasko/comments/1620764.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mflasko/commentrss.aspx?PostID=1620764</wfw:commentRss><description>&lt;p&gt;We have recently launched a &lt;a href="http://connect.microsoft.com/WNDP/Survey/Survey.aspx?SurveyID=3402"&gt;survey&lt;/a&gt; to get your feedback regarding the network development experience on Windows.&amp;nbsp; If you have written a network-aware application (commercial product, as a hobby, etc) we would like to hear from you.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;NOTE FOR WINSOCK API USERS&lt;/strong&gt;: The survey has a section devoted to Winsock API usage.&amp;nbsp; I look forward to learning about all the ways in which Winsock is being leveraged in your applications and what you would like to see added or changed in the future. &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1620764" width="1" height="1"&gt;</description></item><item><title>Writing IP Agnostic Application Tidbits on Channel9</title><link>http://blogs.msdn.com/mflasko/archive/2006/12/13/writing-ip-agnostic-application-tidbits-on-channel9.aspx</link><pubDate>Thu, 14 Dec 2006 07:19:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1282069</guid><dc:creator>mflasko</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mflasko/comments/1282069.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mflasko/commentrss.aspx?PostID=1282069</wfw:commentRss><description>&lt;P&gt;I have yet to write the third part in the series on writing ip agnostic apps, but in the meantime,&amp;nbsp;Anthony Jones (Winsock Developer/Guru) and I chatted with Charles about the topic on Channel 9: &lt;A href="http://channel9.msdn.com/Showpost.aspx?postid=265664"&gt;http://channel9.msdn.com/Showpost.aspx?postid=265664&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;We had a great time creating the video.&amp;nbsp; It&amp;nbsp;jumps around to many topics, but I suppose that is what we get when Charles stops by, says hi while powering on his&amp;nbsp;camera&amp;nbsp;and then hits record :)&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1282069" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mflasko/archive/tags/Orcas/default.aspx">Orcas</category><category domain="http://blogs.msdn.com/mflasko/archive/tags/Sockets/default.aspx">Sockets</category><category domain="http://blogs.msdn.com/mflasko/archive/tags/Winsock/default.aspx">Winsock</category></item><item><title>Writing IP Agnostic Applications (How to support IPv4 &amp; IPv6)</title><link>http://blogs.msdn.com/mflasko/archive/2006/10/24/writing-ip-agnostic-applications-how-to-support-ipv4-ipv6.aspx</link><pubDate>Tue, 24 Oct 2006 18:08:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:869891</guid><dc:creator>mflasko</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mflasko/comments/869891.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mflasko/commentrss.aspx?PostID=869891</wfw:commentRss><description>&lt;P&gt;With the adoption of IPv6 ever increasing (ie. it is the preferred protocol on Windows Vista) it is important that network aware applications support IPv4 and IPv6.&amp;nbsp; I have started a series of posts on our team blog discussing how one can go about writing internet protocol agnostic code....&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;A class="" href="http://blogs.msdn.com/wndp/archive/2006/08/29/Creating-IP-Agnostic-Applications--Part--1.aspx" mce_href="http://blogs.msdn.com/wndp/archive/2006/08/29/Creating-IP-Agnostic-Applications--Part--1.aspx"&gt;Part 1&lt;/A&gt; and &lt;A class="" href="http://blogs.msdn.com/wndp/archive/2006/10/24/creating-ip-agnostic-applications-part-2-dual-mode-sockets.aspx" mce_href="http://blogs.msdn.com/wndp/archive/2006/10/24/creating-ip-agnostic-applications-part-2-dual-mode-sockets.aspx"&gt;Part 2&lt;/A&gt; have already been posted......&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=869891" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mflasko/archive/tags/Sockets/default.aspx">Sockets</category><category domain="http://blogs.msdn.com/mflasko/archive/tags/Winsock/default.aspx">Winsock</category></item><item><title>System.Net.HttpWebRequest &amp; pipelining</title><link>http://blogs.msdn.com/mflasko/archive/2006/07/17/669293.aspx</link><pubDate>Tue, 18 Jul 2006 05:33:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:669293</guid><dc:creator>mflasko</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/mflasko/comments/669293.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mflasko/commentrss.aspx?PostID=669293</wfw:commentRss><description>&lt;P&gt;&lt;FONT face="Times New Roman" size=3&gt;&lt;SPAN style="FONT-SIZE: 12pt"&gt;The System.Net.HttpWebRequest class in the .Net Framework implements a HTTP stack in managed code.&amp;nbsp; One of the features of the stack is that it supports HTTP pipelining.&amp;nbsp; Pipelining is the ability for an HTTP client application to send multiple requests on a connection before the server responds to the first request.&amp;nbsp; Wikipedia describes pipelining here: &lt;A title=http://en.wikipedia.org/wiki/HTTP_pipelining href="http://en.wikipedia.org/wiki/HTTP_pipelining"&gt;&lt;FONT color=#800080&gt;http://en.wikipedia.org/wiki/HTTP_pipelining&lt;/FONT&gt;&lt;/A&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Times New Roman" size=3&gt;&lt;SPAN style="FONT-SIZE: 12pt"&gt;This post is to give seasoned users of the HttpWebRequest class a heads up about a design change in the way we handle pipelining in version 2.0 of the .Net Framework.&amp;nbsp; In 2.0 we throttle pipelined requests as follows:&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Times New Roman" size=3&gt;&lt;SPAN style="FONT-SIZE: 12pt"&gt;If the number of sent pipelined requests reaches 10, no more requests will be written to the server (pipeline “paused”).&amp;nbsp; When the number of written pipelined requests drops to 5 or less, because of processed responses, more requests will be written to the server if possible (pipeline “unpaused”).&amp;nbsp; Of course all the other factors influencing pipeline-ability are still considered.&amp;nbsp; The values of 10 and 5 noted above are not configurable by the developer.&amp;nbsp; This throttling mechanism was introduced so as to not overwhelm servers after a number of requests are queued up on the server side.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=669293" width="1" height="1"&gt;</description></item><item><title>Winsock enhancements in Vista</title><link>http://blogs.msdn.com/mflasko/archive/2006/02/24/538765.aspx</link><pubDate>Fri, 24 Feb 2006 18:07:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:538765</guid><dc:creator>mflasko</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mflasko/comments/538765.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mflasko/commentrss.aspx?PostID=538765</wfw:commentRss><description>&lt;P&gt;We have made&amp;nbsp;a number of improvements in Winsock for Windows Vista.&amp;nbsp; Recently we have detailed a few of these on our team blog:&lt;/P&gt;
&lt;P&gt;"Introduction to WSK" - a new kernel mode socket API: &lt;A HREF="/wndp/archive/2006/02/24/538746.aspx"&gt;http://blogs.msdn.com/wndp/archive/2006/02/24/538746.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;"Winsock and Vista User Account Control": &lt;A HREF="/wndp/archive/2006/02/22/537082.aspx"&gt;http://blogs.msdn.com/wndp/archive/2006/02/22/537082.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;"Categorizing LSPs and Applications"&lt;/P&gt;
&lt;P&gt;&lt;A HREF="/wndp/archive/2006/02/09/529031.aspx"&gt;http://blogs.msdn.com/wndp/archive/2006/02/09/529031.aspx&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=538765" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mflasko/archive/tags/Winsock/default.aspx">Winsock</category></item><item><title>Handling a timeout when reading network data</title><link>http://blogs.msdn.com/mflasko/archive/2006/02/20/535655.aspx</link><pubDate>Mon, 20 Feb 2006 20:10:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:535655</guid><dc:creator>mflasko</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mflasko/comments/535655.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mflasko/commentrss.aspx?PostID=535655</wfw:commentRss><description>&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Arial"&gt;I have been involved in a number of forum posts and mail threads lately regarding reading data from a socket.&amp;nbsp; The typical situation is as follows:&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Arial"&gt;A&amp;nbsp;TcpClient object is connected to a remote party. The application gets a reference to a NeworkStream object by calling the TCPClient’s GetStream method. The remote party begins sending messages and the NetworkStream's read method is used to read the data sent over the network.&amp;nbsp; All is well so far:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Arial"&gt;Now, to avoid waiting in a blocking read call forever, one can set a timeout in the call to NetworkStream.Read( ).&amp;nbsp; If&amp;nbsp;no data arrives within the timeout specified, an exception is thrown.&amp;nbsp;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Arial"&gt;At this point one may be tempted to catch the exception and then reissue the read on the same NetworkStream.&amp;nbsp; This strategy can lead to unexpected errors.&amp;nbsp; The best thing to do is to now treat the NetworkStream (socket)&amp;nbsp;as being&amp;nbsp;in an unstable state.&amp;nbsp; This is because when the underlying stack times out, the underlying I/O read gets cancelled.&amp;nbsp; If data comes in at the same time, the data will be lost, resulting in a corrupted data stream.&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Arial"&gt;A better&amp;nbsp;approach is to catch the exception,&amp;nbsp;close the&amp;nbsp;socket or TCPClient and reconnect if necessary.&amp;nbsp;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0.75pt 0pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-family: 'Courier New'"&gt;TcpClient client;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0.75pt 0pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-family: 'Courier New'"&gt;NetworkStream stream;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0.75pt 0pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-family: 'Courier New'"&gt;byte[] readBuffer = new byte[1024];&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0.75pt 0pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-family: 'Courier New'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0.75pt 0pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-family: 'Courier New'"&gt;try &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0.75pt 0pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0.75pt 0pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;// Create a TcpClient.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0.75pt 0pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;// Note, for this client to work you need to have a TcpServer &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0.75pt 0pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;// connected to the same address as specified by the server, port&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0.75pt 0pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;// combination.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0.75pt 0pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Int32 port = 13000;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0.75pt 0pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;client = new TcpClient(server, port);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0.75pt 0pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0.75pt 0pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;// Get a client stream for reading and writing.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0.75pt 0pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;//&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Stream stream = client.GetStream();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0.75pt 0pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0.75pt 0pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;stream = client.GetStream();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0.75pt 0pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;// set read timeout&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0.75pt 0pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-family: 'Courier New'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0.75pt 0pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;stream.ReadTimeout = 60000;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0.75pt 0pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-family: 'Courier New'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;stream.Read(readBuffer,0,readBuffer.Length);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;……&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial"&gt;} catch (IOException e){&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;// the read timed out&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;// At this point the socket should be considered in a bad state. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana; mso-bidi-font-family: Arial"&gt;}&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman" size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=535655" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mflasko/archive/tags/Sockets/default.aspx">Sockets</category></item><item><title>Listening for Network Address Changes</title><link>http://blogs.msdn.com/mflasko/archive/2005/12/29/508100.aspx</link><pubDate>Thu, 29 Dec 2005 23:56:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:508100</guid><dc:creator>mflasko</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/mflasko/comments/508100.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mflasko/commentrss.aspx?PostID=508100</wfw:commentRss><description>&lt;P&gt;In version 2.0 of the .Net Framework, we added a new namespace under System.Net called NetworkInformation.&amp;nbsp; Among many other goodies, one can use this namespace to listen for IP addresses changes on the host.&amp;nbsp; The code below listens for addresses changes and prints a message when a change occurs along with the operational status of each interface on the host:&lt;/P&gt;
&lt;P&gt;using System;&lt;BR&gt;using System.Net;&lt;BR&gt;using System.Net.NetworkInformation;&lt;/P&gt;
&lt;P&gt;namespace Examples.Net.AddressChanges&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class NetworkingExample&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static void Main()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NetworkChange.NetworkAddressChanged += new &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NetworkAddressChangedEventHandler(AddressChangedCallback);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("Listening for address changes. Press any key to exit.");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.ReadLine();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; static void AddressChangedCallback(object sender, EventArgs e)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("Addresses Change Event Raised");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach(NetworkInterface n in adapters)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("&amp;nbsp;&amp;nbsp; {0} is {1}", n.Name, n.OperationalStatus);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;NOTE: Due to timing in the underlying operating system, if you plan to inspect what addresses are available as soon as the callback fires, you may need to sleep for 1 second.&amp;nbsp; If you don't sleep, when you inspect the current set of addresses the changes may not have taken effect.&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=508100" width="1" height="1"&gt;</description></item><item><title>Using a single socket to accept IPv6 of IPv4 connections</title><link>http://blogs.msdn.com/mflasko/archive/2005/11/19/494938.aspx</link><pubDate>Sun, 20 Nov 2005 03:28:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:494938</guid><dc:creator>mflasko</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mflasko/comments/494938.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mflasko/commentrss.aspx?PostID=494938</wfw:commentRss><description>&lt;P&gt;Generally I don't like making a post that only includes links to other posts, but I'm making an exception for this case.&amp;nbsp; In this (&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;a href="http://blogs.msdn.com/malarch/archive/2005/11/18/494769.aspx"&gt;http://blogs.msdn.com/malarch/archive/2005/11/18/494769.aspx&lt;/A&gt;) article Malar explains how to create a single socket that can listen for IPv6 and IPv4 connections.&amp;nbsp; This ability is due to the new TCP/IP stack in Vista.&amp;nbsp; Malar uses the following code to demonstrate creating such a socket:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&amp;nbsp;static void Main(string[] args)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Socket sock = new Socket(AddressFamily.InterNetworkV6, SocketType.Stream, ProtocolType.Tcp);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sock.SetSocketOption(SocketOptionLevel.IPv6, (SocketOptionName)27, 0);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sock.Bind(new IPEndPoint(IPAddress.IPv6Any, 8000));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sock.Listen(4);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Socket client = sock.Accept();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("Client has connected successfully with the server");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;The socket option being set above is pound (#)&amp;nbsp;defined in Winsock as IPv6Only; however, since this is a Vista feature, we don't have the name encapsulated in the SocketOptionName enumeration yet.&amp;nbsp;&amp;nbsp;I should note, the above is not supported in Whidbey, but we are working to enable this scenario in a future release.&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=494938" width="1" height="1"&gt;</description></item><item><title>Strict HTTP Parsing</title><link>http://blogs.msdn.com/mflasko/archive/2005/11/02/488370.aspx</link><pubDate>Wed, 02 Nov 2005 19:37:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:488370</guid><dc:creator>mflasko</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/mflasko/comments/488370.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mflasko/commentrss.aspx?PostID=488370</wfw:commentRss><description>&lt;P&gt;In version 2.0 of the .Net Framework, we (System.Net) changed how we parse HTTP traffic.&amp;nbsp; The change has gone to a more strict parsing model.&amp;nbsp; One example, is we now require a CRLF (carriage return, line feed) at the end of each line.&amp;nbsp;&amp;nbsp;While these changes were done to&amp;nbsp;improve the security of our HTTP stack, it has the negative effect of causing some applications to see exceptions thrown where they didn't previously.&amp;nbsp;&amp;nbsp; If you find the parsing of the HTTP headers to be too strict, you can revert the strictness of our parsing to improve app compatibility.&amp;nbsp; This is done via an application configuration file setting as shown below&lt;/P&gt;
&lt;DIV class=section id=syntaxSection&gt;
&lt;DIV class=code id=syntaxCodeBlocks&gt;&lt;SPAN codeLanguage="other"&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;FONT color=#800080&gt;&lt;FONT color=#000000&gt;Hierarchy:&lt;BR&gt;&amp;lt;configuration&amp;gt; Element&lt;BR&gt;&amp;nbsp; &amp;lt;system.Net&amp;gt; Element (Network Settings)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;settings&amp;gt; Element (Network Settings)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;httpWebRequest&amp;gt; Element (Network Settings)&lt;BR&gt;&amp;nbsp;&lt;BR&gt;&amp;lt;httpWebRequest&lt;BR&gt;&amp;nbsp; maximumResponseHeadersLength="size"&lt;BR&gt;&amp;nbsp; maximumErrorResponseLength="size"&lt;BR&gt;&amp;nbsp; maximumUnauthorizedUploadLength="size"&lt;BR&gt;&amp;nbsp; &lt;STRONG&gt;useUnsafeHeaderParsing="true|false"&lt;BR&gt;&lt;/STRONG&gt;/&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;STRONG&gt;Additional note about UnSafeHeaderParsing:&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color=#800080&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;By default, the .NET Framework strictly enforces RFC 2616 for URI parsing. Some server responses may include control characters in prohibited fields, which will cause the &lt;?XML:NAMESPACE PREFIX = MSHelp NS = "http://msdn.microsoft.com/mshelp" /&gt;&lt;MSHelp:link tabIndex=0 keywords="M:System.Net.HttpWebRequest.GetResponse"&gt;System.Net.HttpWebRequest.GetResponse&lt;/MSHelp:link&gt; method to throw a &lt;MSHelp:link tabIndex=0 keywords="T:System.Net.WebException"&gt;WebException&lt;/MSHelp:link&gt;. If &lt;B&gt;useUnsafeHeaderParsing&lt;/B&gt; is set to &lt;B&gt;true&lt;/B&gt;, &lt;B&gt;System.Net.HttpWebRequest.GetResponse&lt;/B&gt; will not throw in this case; however, your application will be vulnerable to several forms of URI parsing attacks. The best solution is to change the server so that the response does not include control characters.&lt;/FONT&gt;&lt;/P&gt;&lt;SECTIONS xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5"&gt;
&lt;P&gt;&lt;BR&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;a href="http://blogs.msdn.com/malarch/archive/2005/09/13/466664.aspx"&gt;&lt;/A&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=488370" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mflasko/archive/tags/Changes+in+Whidbey+from+Everett/default.aspx">Changes in Whidbey from Everett</category></item><item><title>System.Net now registers a default FtpWebRequest implementation </title><link>http://blogs.msdn.com/mflasko/archive/2005/09/11/463868.aspx</link><pubDate>Mon, 12 Sep 2005 05:53:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:463868</guid><dc:creator>mflasko</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mflasko/comments/463868.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mflasko/commentrss.aspx?PostID=463868</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #339966; FONT-FAMILY: Arial"&gt;&lt;FONT style="BACKGROUND-COLOR: #ffffff" color=#000000&gt;Prior to the .NET Framework version 2.0, applications could register a component to handle FTP requests using System.Net’s extensible pluggable protocol framework.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Components for handling different web requests are registered by associating the component with a specific URI prefix.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Any web request that matches that prefix would then be handled by that component.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;In version 2.0 of the .NET Framework, System.Net now supports an FtpWebRequest component that is registered by default for the “ftp:” prefix.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Any applications that are registering for this prefix (prior to this release) could now be broken because the prefix (FTP) is already taken.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #339966; FONT-FAMILY: Arial"&gt;&lt;FONT style="BACKGROUND-COLOR: #ffffff" face=Arial color=#000000&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #339966; FONT-FAMILY: Arial"&gt;&lt;FONT style="BACKGROUND-COLOR: #ffffff" color=#000000&gt;There is a workaround for this issue.&amp;nbsp; It is as follows: &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #339966; FONT-FAMILY: Arial"&gt;&lt;FONT style="BACKGROUND-COLOR: #ffffff" face=Arial color=#000000&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #339966; FONT-FAMILY: Arial"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #339966"&gt;&lt;FONT style="BACKGROUND-COLOR: #ffffff"&gt;&lt;FONT color=#000000&gt;Update the application configuration file to remove the default FTP pluggable protocol prior to registering your own FTP component:&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #339966; FONT-FAMILY: Arial"&gt;&lt;FONT style="BACKGROUND-COLOR: #ffffff"&gt;&lt;FONT color=#000000&gt;&amp;lt;system.net&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #339966; FONT-FAMILY: Arial"&gt;&lt;FONT style="BACKGROUND-COLOR: #ffffff"&gt;&lt;FONT color=#000000&gt;&amp;lt;webRequestModules&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 1in; TEXT-INDENT: 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #339966; FONT-FAMILY: Arial"&gt;&lt;FONT style="BACKGROUND-COLOR: #ffffff"&gt;&lt;FONT color=#000000&gt;&amp;lt;remove prefix = “ftp:” /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #339966; FONT-FAMILY: Arial"&gt;&lt;FONT style="BACKGROUND-COLOR: #ffffff"&gt;&lt;FONT color=#000000&gt;&lt;SPAN style="mso-tab-count: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&amp;lt;/webRequestModules&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT style="BACKGROUND-COLOR: #ffffff"&gt;&lt;FONT color=#000000&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #339966; FONT-FAMILY: Arial"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#000000&gt; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT color=#000000&gt;&amp;lt;/system.net&amp;gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #339966"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT color=#000000&gt;I hope this information helps to make your applications transition to Whidbey smooth as silk :).&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=463868" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mflasko/archive/tags/Changes+in+Whidbey+from+Everett/default.aspx">Changes in Whidbey from Everett</category></item></channel></rss>