<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Buffer-Lebensdauer bei Pipeclient mit FILE_FLAG_OVERLAPPED?]]></title><description><![CDATA[<p>Hello!</p>
<p>Verstehe ich es richtig, dass der buffer für WriteFile() so nicht verändert werden darf, bis die Operation fertig ist?</p>
<p>Server:<br />
PIPE_ACCESS_INBOUND, PIPE_TYPE_MESSAGE, PIPE_READMODE_MESSAGE, PIPE_WAIT</p>
<p>Client:<br />
GENERIC_WRITE, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, PIPE_READMODE_MESSAGE</p>
<p>Denn bis jetzt hat es funktioniert, obwohl nach WriteFile() der buffer wieder gelöscht wird.<br />
Ich hab das Prinzip auch nach mehrmaligem lesen des MSDN nicht ganz verstanden.<br />
Bei &quot;Overlapped I/O&quot;, schickt WriteFile() da beim Aufruf intern einen Zeiger auf den buffer in eine Warteschlange? Oder wird eine Kopie angefertigt? Und wartet WriteFile() darauf?</p>
<p>Wie mache ich es richtig?</p>
<p>Wäre sehr dankbar für eine Antwort!<br />
Danke, Grüße!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/241318/buffer-lebensdauer-bei-pipeclient-mit-file_flag_overlapped</link><generator>RSS for Node</generator><lastBuildDate>Mon, 06 Apr 2026 00:00:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/241318.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 19 May 2009 00:47:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Buffer-Lebensdauer bei Pipeclient mit FILE_FLAG_OVERLAPPED? on Tue, 19 May 2009 00:47:03 GMT]]></title><description><![CDATA[<p>Hello!</p>
<p>Verstehe ich es richtig, dass der buffer für WriteFile() so nicht verändert werden darf, bis die Operation fertig ist?</p>
<p>Server:<br />
PIPE_ACCESS_INBOUND, PIPE_TYPE_MESSAGE, PIPE_READMODE_MESSAGE, PIPE_WAIT</p>
<p>Client:<br />
GENERIC_WRITE, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, PIPE_READMODE_MESSAGE</p>
<p>Denn bis jetzt hat es funktioniert, obwohl nach WriteFile() der buffer wieder gelöscht wird.<br />
Ich hab das Prinzip auch nach mehrmaligem lesen des MSDN nicht ganz verstanden.<br />
Bei &quot;Overlapped I/O&quot;, schickt WriteFile() da beim Aufruf intern einen Zeiger auf den buffer in eine Warteschlange? Oder wird eine Kopie angefertigt? Und wartet WriteFile() darauf?</p>
<p>Wie mache ich es richtig?</p>
<p>Wäre sehr dankbar für eine Antwort!<br />
Danke, Grüße!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1712543</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1712543</guid><dc:creator><![CDATA[MrY]]></dc:creator><pubDate>Tue, 19 May 2009 00:47:03 GMT</pubDate></item><item><title><![CDATA[Reply to Buffer-Lebensdauer bei Pipeclient mit FILE_FLAG_OVERLAPPED? on Tue, 19 May 2009 06:08:35 GMT]]></title><description><![CDATA[<p><a href="http://msdn.microsoft.com/en-us/library/aa365603.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/aa365603.aspx</a><br />
<a href="http://www.ddj.com/windows/184416624" rel="nofollow">http://www.ddj.com/windows/184416624</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1712565</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1712565</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Tue, 19 May 2009 06:08:35 GMT</pubDate></item><item><title><![CDATA[Reply to Buffer-Lebensdauer bei Pipeclient mit FILE_FLAG_OVERLAPPED? on Tue, 19 May 2009 08:58:34 GMT]]></title><description><![CDATA[<p>Grundsätzlich: Eine Pipe ist auch nur eine Datei. Wenn Du hineingeschrieben hast, dann stehen die Daten in der Pipe genauso wie in einer Datei.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1712658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1712658</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Tue, 19 May 2009 08:58:34 GMT</pubDate></item><item><title><![CDATA[Reply to Buffer-Lebensdauer bei Pipeclient mit FILE_FLAG_OVERLAPPED? on Tue, 19 May 2009 14:55:53 GMT]]></title><description><![CDATA[<p>Steht doch ganz klar in der MSDN</p>
<p>Bei WriteFile</p>
<blockquote>
<p>lpBuffer</p>
<p>This buffer must remain valid for the duration of the write operation. The caller must not use this buffer until the write operation is completed.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1712851</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1712851</guid><dc:creator><![CDATA[.........]]></dc:creator><pubDate>Tue, 19 May 2009 14:55:53 GMT</pubDate></item><item><title><![CDATA[Reply to Buffer-Lebensdauer bei Pipeclient mit FILE_FLAG_OVERLAPPED? on Tue, 19 May 2009 17:06:25 GMT]]></title><description><![CDATA[<p>Moment mal, @.........:<br />
Da ist garnichts klar.<br />
Was ist eine &quot;write operation&quot;? Ein WriteFile() Aufruf bis zur Rückkehr, oder ein abgeschlossener Sendevorgang, ...</p>
<p>Aber nun vermute ich es schon. Es ist wie eine Datei. Sobald WriteFile() zurückkehrt, darf der buffer ungültig sein.<br />
Dann ist es also einfacher, als ich dachte.</p>
<p>Danke auch für die Links.<br />
MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1712895</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1712895</guid><dc:creator><![CDATA[MrY]]></dc:creator><pubDate>Tue, 19 May 2009 17:06:25 GMT</pubDate></item><item><title><![CDATA[Reply to Buffer-Lebensdauer bei Pipeclient mit FILE_FLAG_OVERLAPPED? on Tue, 19 May 2009 17:14:26 GMT]]></title><description><![CDATA[<blockquote>
<p>Sobald WriteFile() zurückkehrt, darf der buffer ungültig sein.</p>
</blockquote>
<p>Wenn du Overlapped I/O verwendest und GetLastError() nach dem WriteFile() ERROR_IO_PENDING zurückgibt darf der Puffer nicht verändert oder gelöscht werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1712900</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1712900</guid><dc:creator><![CDATA[..........]]></dc:creator><pubDate>Tue, 19 May 2009 17:14:26 GMT</pubDate></item><item><title><![CDATA[Reply to Buffer-Lebensdauer bei Pipeclient mit FILE_FLAG_OVERLAPPED? on Tue, 19 May 2009 18:21:27 GMT]]></title><description><![CDATA[<p>Wie würdet ihr dann ein mehr oder weniger zeitkritisches Loggingsystem bauen?<br />
Da, wo WriteFile() aufgerufen wird, muss es sofort zurückkehren. Es werden aber manchmal tausende Messages über die Pipe gehen.<br />
Müsste ich dann eine Warteschleife erstellen, mit den einzelnen Overlapped-Strukturen, einem manuellen Event usw...?<br />
Geht das nicht einfacher?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1712935</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1712935</guid><dc:creator><![CDATA[MrY]]></dc:creator><pubDate>Tue, 19 May 2009 18:21:27 GMT</pubDate></item><item><title><![CDATA[Reply to Buffer-Lebensdauer bei Pipeclient mit FILE_FLAG_OVERLAPPED? on Tue, 19 May 2009 19:00:28 GMT]]></title><description><![CDATA[<p>Ich würde in dem Proztess eine Queue anlegen, die die Nachrichten speichert und einen zweiten Thread der die Nachrichten über die Pipe rausschaufelt.<br />
Zu viele Threads machen alle nur langsam.</p>
<p>Aber wie zeitkritisch ist das Ganze denn? Ein bischen in eine Pipe zu schreiben ist extrem schnell.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1712952</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1712952</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Tue, 19 May 2009 19:00:28 GMT</pubDate></item><item><title><![CDATA[Reply to Buffer-Lebensdauer bei Pipeclient mit FILE_FLAG_OVERLAPPED? on Tue, 19 May 2009 20:12:12 GMT]]></title><description><![CDATA[<p>Naja, klar ist das schreiben schnell. Aber nicht synchron, oder? Wenn da der Server mal hängen sollte, hängt der Client doch auch (Wäre ein Timeout unter sagen wir 500ms überhaupt sinnvoll? Eine Message hat so 1KB also, und es sind maximal ca. 5000 pro Sekunde).<br />
Ist synchron eigentlich generell langsamer als asynchron? Oder ist da kaum/kein Unterschied, besonders wenn das ganze lokal stattfindet?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1712992</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1712992</guid><dc:creator><![CDATA[MrY]]></dc:creator><pubDate>Tue, 19 May 2009 20:12:12 GMT</pubDate></item><item><title><![CDATA[Reply to Buffer-Lebensdauer bei Pipeclient mit FILE_FLAG_OVERLAPPED? on Wed, 20 May 2009 05:19:52 GMT]]></title><description><![CDATA[<p>Wobei wenn, wie in meinem Fall, die zu sendenden Daten sehr flüchtig sind, könnte ich doch gleich eine Kopie-Queue + eine SYNC pipe verwenden... Wozu dann noch mit Wartereien rumspielen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1713076</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1713076</guid><dc:creator><![CDATA[MrY]]></dc:creator><pubDate>Wed, 20 May 2009 05:19:52 GMT</pubDate></item><item><title><![CDATA[Reply to Buffer-Lebensdauer bei Pipeclient mit FILE_FLAG_OVERLAPPED? on Wed, 20 May 2009 06:05:55 GMT]]></title><description><![CDATA[<p>Martin Richter schrieb:</p>
<blockquote>
<p>Ich würde in dem Proztess eine Queue anlegen, die die Nachrichten speichert und einen zweiten Thread der die Nachrichten über die Pipe rausschaufelt.</p>
</blockquote>
<p>Genau. Wollte ich grad schreiben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>MrY schrieb:</p>
<blockquote>
<p>Naja, klar ist das schreiben schnell. Aber nicht synchron, oder?</p>
</blockquote>
<p>Was verstehst du unter synchron? Natürlich muss der Sender nicht warten bis der Empfänger die Daten abgeholt hat...</p>
<blockquote>
<p>Wenn da der Server mal hängen sollte, hängt der Client doch auch (Wäre ein Timeout unter sagen wir 500ms überhaupt sinnvoll? Eine Message hat so 1KB also, und es sind maximal ca. 5000 pro Sekunde).</p>
</blockquote>
<p>&quot;Server hängt -&gt; Client hängt&quot; ist ein übliches Szenario, ja. Irgendwann sind die Sende-Puffer beim Sender und die Empfangs-Puffer beim Empfänger voll, und dann fängt die Sender-Seite an zu blockieren.</p>
<p>Und ... 5000 Messages pro Sekunde sind schon nicht ganz wenig. Da würdest du vermutlich auch schon von der Worker-Thread Lösung profitieren, da der Worker-Thread dann, wenn die Rechenzeit eng wird, auch mehrere Messages auf einmal in die Pipe jagen kann. Das verringert den Overhead pro Message deutlich.</p>
<blockquote>
<p>Ist synchron eigentlich generell langsamer als asynchron? Oder ist da kaum/kein Unterschied, besonders wenn das ganze lokal stattfindet?</p>
</blockquote>
<p>Das kommt auf den Treiber/zuständigen Systemteil an, der die Operation implementiert. Bei Pipes kann ich nichts dazu sagen. Auf jeden Fall *können* synchrone Operationen schneller sein als asynchrone, nämlich dann, wenn der Treiber/zuständige Systemteil sie sofort abschliessen kann. Wieviel das um ist habe ich aber noch nicht ausprobiert.<br />
Ob es Fälle gibt wo asynchrone Operationen schneller sein können als synchrone weiss ich nicht. Vermutlich auch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1713091</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1713091</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 20 May 2009 06:05:55 GMT</pubDate></item><item><title><![CDATA[Reply to Buffer-Lebensdauer bei Pipeclient mit FILE_FLAG_OVERLAPPED? on Wed, 20 May 2009 06:45:37 GMT]]></title><description><![CDATA[<p>Also Moment, Zusammenfassung:</p>
<p>Es sollen Daten von einem Clientprozess zu einem Serverprozess gesendet werden.<br />
Der Clientprozess bekommt die Daten in einem DirectPlay-Callback. Die Daten sind allerdings nur innerhalb von eben diesem gültig. Das Senden muss allerdings sofortig, ohne jegliches Warten, erfolgen.</p>
<p>1. Option:<br />
Client sendet im DirectPlay-Callback einfach synchron (Beidseitig im blocking mode). Dabei wird ein 100ms Timeout festgelegt. Somit sollte der Callback höchstens wenig bis garnicht aufgehalten werden.<br />
Trotzdem gefällt mir das nicht so Recht. Vielleicht wegen des Timeouts.</p>
<p>2. Option:<br />
Client kopiert im Callback die Daten in eine Queue.<br />
Ein extra Thread prüft ständig auf neue Einträge und sendet diese gegebenfalls (synchron, extra Thread ist ja nicht zeitkritisch).<br />
Hier gefällt mir nicht, dass der extra Thread unnötig Resourcen verbrauchen würde (Endlosschleife ala if(!queue.empty())...).</p>
<p>3. Option<br />
Client sendet im DirectPlay-Callback asynchron (Overlapped). Gleichzeitig wird die Overlapped-Struktur und die Daten zusammen gespeichert (Gesendet wird mit einem Zeiger auf diese Daten).<br />
Ein extra Thread wartet in einer Endlosschleife mit WaitForMultipleObjects(). Wird eine Operation abgeschlossen, werden die Daten anhand des gespeicherten Overlapped/Daten-Paars gelöscht.<br />
Allerdings steht auf <a href="http://www.ddj.com/windows/184416624" rel="nofollow">http://www.ddj.com/windows/184416624</a> in der Mitte bei &quot;Pipe Fault Handling in Code&quot; etwas davon, dass man ein overlapped WriteFile() nicht machen soll, bevor nicht das vorige &quot;completed&quot; wurde...<br />
Und auch, dass es (dadurch?) passieren kann, dass eine operation niemals fertiggestellt wird.<br />
Man kann aber ein timeout für eine overlapped operation setzen? Oder ist gemeint, dass nach einer gewissen Zeit der Overlapped/Daten-Eintrag einfach verworfen wird? So würde ich es dann wohl machen...</p>
<p>Option 1 naja... Option 2 resourcenfressend... Option 3 optimal?<br />
Was meint ihr?</p>
<p>Danke euch jedenfalls!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1713106</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1713106</guid><dc:creator><![CDATA[MrY]]></dc:creator><pubDate>Wed, 20 May 2009 06:45:37 GMT</pubDate></item><item><title><![CDATA[Reply to Buffer-Lebensdauer bei Pipeclient mit FILE_FLAG_OVERLAPPED? on Wed, 20 May 2009 09:36:47 GMT]]></title><description><![CDATA[<blockquote>
<p>Hier gefällt mir nicht, dass der extra Thread unnötig Resourcen verbrauchen würde (Endlosschleife ala if(!queue.empty())...).</p>
</blockquote>
<p>Nein, würde er nicht, weil man natürlich eine Condition-Variable (bzw. einen Event) verwenden würde, um ihn aus seinem wohlverdienten Schlummer zu wecken, sobald es etwas zu tun gibt.</p>
<p>Also WaitForSingleObject() statt Polling auf !queue.empty().</p>
<p>Option 3: blödsinn. Kleines Detail am Rande: wenn man den Thread der die IO Operation startet nicht kontrolliert, kann man asynchrones IO vergessen. Wenn der Thread nämlich beendet werden sollte, dann gehen die IOs die er abgesetzt hat mit hopps.</p>
<p>Ne, ehrlich, Option 2 ist optimal. Natürlich nur wenn man sie nicht dumm implementiert *g*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1713201</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1713201</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 20 May 2009 09:36:47 GMT</pubDate></item><item><title><![CDATA[Reply to Buffer-Lebensdauer bei Pipeclient mit FILE_FLAG_OVERLAPPED? on Wed, 20 May 2009 12:07:34 GMT]]></title><description><![CDATA[<p>Das mit dem Event ist mir im Bett auch grad eingefallen.<br />
Deinen Einwand verstehe ich nicht ganz. Die noch nicht angekommenen Messages (Also pending IOs) gehen verloren, wenn der Thread abgemurkst wird?</p>
<p>Allerdings mache ich es jetzt natürlich mit einem Event.<br />
Jedes queue.push_back() signalisiert es, der Worker-Thread wartet darauf, leert die Queue, resettet das Event und weiter gehts wieder von vorn...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1713273</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1713273</guid><dc:creator><![CDATA[MrY]]></dc:creator><pubDate>Wed, 20 May 2009 12:07:34 GMT</pubDate></item><item><title><![CDATA[Reply to Buffer-Lebensdauer bei Pipeclient mit FILE_FLAG_OVERLAPPED? on Wed, 20 May 2009 12:28:41 GMT]]></title><description><![CDATA[<blockquote>
<p>wenn der Thread abgemurkst wird</p>
</blockquote>
<p>Threads soll man nicht abmurksen, sondern geordnet herunterfahren.<br />
Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1713286</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1713286</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Wed, 20 May 2009 12:28:41 GMT</pubDate></item><item><title><![CDATA[Reply to Buffer-Lebensdauer bei Pipeclient mit FILE_FLAG_OVERLAPPED? on Wed, 20 May 2009 12:37:38 GMT]]></title><description><![CDATA[<p>Ich meinte @hustbaers &quot;beenden&quot;.<br />
Außerdem kann man Threads nicht immer geordnet herunterfahren! Sei es ein Blocking-Call oder ein Prozess-Crash...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1713293</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1713293</guid><dc:creator><![CDATA[MrY]]></dc:creator><pubDate>Wed, 20 May 2009 12:37:38 GMT</pubDate></item><item><title><![CDATA[Reply to Buffer-Lebensdauer bei Pipeclient mit FILE_FLAG_OVERLAPPED? on Wed, 20 May 2009 23:43:16 GMT]]></title><description><![CDATA[<p>MrY schrieb:</p>
<blockquote>
<p>Deinen Einwand verstehe ich nicht ganz. Die noch nicht angekommenen Messages (Also pending IOs) gehen verloren, wenn der Thread abgemurkst wird?</p>
</blockquote>
<p>Die gehen auch verloren, wenn der Thread sich &quot;ganz normal&quot; brav selbst beendet, indem z.B. die Thread-Funktion &quot;return;&quot; macht.</p>
<p>So. Hat einige Zeit gedauert bis ich die Stelle in der MSDN wiedergefunden habe, wo das beschrieben steht. Aber hier ist sie (Doku zu ExitThread): <a href="http://msdn.microsoft.com/en-us/library/ms682659(VS.85).aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/ms682659(VS.85).aspx</a></p>
<p>MSDN schrieb:</p>
<blockquote>
<p>When this function is called (<strong>either explicitly or by returning from a thread procedure</strong>), the current thread's stack is deallocated, <strong>all pending I/O initiated by the thread is canceled</strong>, and the thread terminates. (...)</p>
</blockquote>
<p>BTW: Wenn man mit asynchronen IOs arbeitet, den Thread der diese startet selbst kontrolliert, und vermeiden möchte dass man zu früh die Thread-Funktion verlässt, kann man dazu GetThreadIOPendingFlag verwenden. Ein einfacher Polling Loop (mit nem Sleep drinnen) reicht hier wohl meistens.</p>
<blockquote>
<p>Außerdem kann man Threads nicht immer geordnet herunterfahren! Sei es ein Blocking-Call oder ein Prozess-Crash...</p>
</blockquote>
<p>Dann muss man es eben bleiben lassen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> TerminateThread ist auf jeden Fall keine Lösung. Wenn man warten kann, dann warten, sonst halt TerminateProcess.</p>
<p>Nochwas: ab Vista oder Windows 7 (weiss ich nimmer, und bin grad zu faul noch weiter zu suchen) werden nichtmehr alle IOs gecancelt, sondern nurmehr die, die <em>nicht</em> einem IO Completion Port zugeordnet sind. Da hat wohl jemand mitgedacht (spät, aber besser als nie).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1713570</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1713570</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 20 May 2009 23:43:16 GMT</pubDate></item></channel></rss>