<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Makura no Soshi &#187; GSoC08</title>
	<atom:link href="http://mschuette.name/wp/category/projects/gsoc/feed/" rel="self" type="application/rss+xml" />
	<link>http://mschuette.name/wp</link>
	<description>枕草子</description>
	<lastBuildDate>Tue, 22 May 2012 08:32:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Finally, the Syslog RFCs</title>
		<link>http://mschuette.name/wp/2009/03/finally-the-syslog-rfcs/</link>
		<comments>http://mschuette.name/wp/2009/03/finally-the-syslog-rfcs/#comments</comments>
		<pubDate>Tue, 10 Mar 2009 19:46:41 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[english]]></category>
		<category><![CDATA[GSoC08]]></category>
		<category><![CDATA[Syslog]]></category>

		<guid isPermaLink="false">http://mschuette.name/wp/?p=246</guid>
		<description><![CDATA[Today the RFCs for the new Syslog procol and transport were published: RFC 5424 on The Syslog Protocol RFC 5425 on Transport Layer Security (TLS) Transport Mapping for Syslog RFC 5426 on Transmission of Syslog Messages over UDP]]></description>
			<content:encoded><![CDATA[<p>Today the RFCs for the new Syslog procol and transport were published:</p>
<ul>
<li><a href="http://www.rfc-editor.org/rfc/rfc5424.txt">RFC 5424 on The Syslog Protocol</a></li>
<li><a href="http://www.rfc-editor.org/rfc/rfc5425.txt">RFC 5425 on Transport Layer Security (TLS) Transport Mapping for Syslog</a></li>
<li><a href="http://www.rfc-editor.org/rfc/rfc5426.txt">RFC 5426 on Transmission of Syslog Messages over UDP </a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://mschuette.name/wp/2009/03/finally-the-syslog-rfcs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>syslogd got into NetBSD CVS</title>
		<link>http://mschuette.name/wp/2008/11/syslogd-got-into-netbsd-cvs/</link>
		<comments>http://mschuette.name/wp/2008/11/syslogd-got-into-netbsd-cvs/#comments</comments>
		<pubDate>Sat, 08 Nov 2008 01:06:00 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[BSD]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[GSoC08]]></category>
		<category><![CDATA[netbsd]]></category>
		<category><![CDATA[syslogd]]></category>

		<guid isPermaLink="false">http://mschuette.name/wp/?p=180</guid>
		<description><![CDATA[Due to the BLIT preparations I nearly missed the important event for my GSoC project: I made it into the NetBSD CVS.  :-) Now I am lost between different code versions in my development SVN, the sf.net CVS, and the NetBSD CVS so I will have to re-merge a little before I can really fix [...]]]></description>
			<content:encoded><![CDATA[<p>Due to the <a href="http://blit.org/">BLIT</a> preparations I nearly missed <em>the</em> important event for my <a href="/wp/gsoc-syslogd/">GSoC project</a>: I made it into the <a href="http://cvsweb.netbsd.org/bsdweb.cgi/src/usr.sbin/syslogd/">NetBSD CVS</a>.  :-)</p>
<p>Now I am lost between different code versions in my development SVN, the sf.net CVS, and the NetBSD CVS so I will have to re-merge a little before I can really fix further problems. But I am grateful that Christos went through the code again before comitting it. Now I can continue an argument with my flatmate whether being a BSD contributer is more <span style="text-decoration: line-through;">geeky</span> prestigious than having a low Erdős number&#8230;  :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://mschuette.name/wp/2008/11/syslogd-got-into-netbsd-cvs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fuzzing</title>
		<link>http://mschuette.name/wp/2008/07/fuzzing/</link>
		<comments>http://mschuette.name/wp/2008/07/fuzzing/#comments</comments>
		<pubDate>Sun, 13 Jul 2008 19:33:22 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[english]]></category>
		<category><![CDATA[GSoC08]]></category>
		<category><![CDATA[Verschiedenes]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[fuzzing]]></category>

		<guid isPermaLink="false">http://mschuette.name/wp/?p=80</guid>
		<description><![CDATA[Fuzzing is a great way to find input validation errors. Just don&#8217;t use it in debug mode whith all input printed verbatim to the poor terminal&#8230; :-&#124;]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Fuzz_testing">Fuzzing</a> is a great way to find input validation errors.</p>
<p>Just don&#8217;t use it in debug mode whith all input printed verbatim to the poor terminal&#8230; :-|</p>
]]></content:encoded>
			<wfw:commentRss>http://mschuette.name/wp/2008/07/fuzzing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>digital vs. analog notes</title>
		<link>http://mschuette.name/wp/2008/07/digital-vs-analog-notes/</link>
		<comments>http://mschuette.name/wp/2008/07/digital-vs-analog-notes/#comments</comments>
		<pubDate>Fri, 11 Jul 2008 18:23:55 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[english]]></category>
		<category><![CDATA[GSoC08]]></category>
		<category><![CDATA[syslogd]]></category>
		<category><![CDATA[trac]]></category>

		<guid isPermaLink="false">http://mschuette.name/wp/?p=78</guid>
		<description><![CDATA[Now that I wrote my midterm summary and completed the survey for GSoC it is once again time to update the Trac-pages. The syslogd is my first try with Trac and so far it has not been too sucessful. In theory a Trac is really nice because it combines several software development tools in one [...]]]></description>
			<content:encoded><![CDATA[<p>Now that I wrote my midterm summary and completed the survey for GSoC it is once again time to update the <a href="https://barney.cs.uni-potsdam.de/trac/syslogd/">Trac-pages</a>. The <a href="http://netbsd-soc.sourceforge.net/projects/syslogd/">syslogd</a> is my first try with Trac and so far it has not been too sucessful.</p>
<p> In theory a Trac is really nice because it combines several software development tools in one place and makes it easier to collaborate on one project; &#8212; but it practice I am mostly working alone and do not have to coordinate with anyone else (of course I should document my work, but it is never strictly necessary for further development). And then the Trac offers little immediate benefits, whereas my notebook is much faster to use, easier to edit and is also usable on trains and buses.</p>
<p>So while I should have much more data online like this &#8230;</p>
<p><img style="vertical-align: middle;" src="/wp/wp-upload/syslog-trac.png" alt="" width="336" height="200" /></p>
<p>&#8230; most of my notes and documentation actually look like this:</p>
<p><img style="vertical-align: middle;" src="/wp/wp-upload/syslog-notebook.png" alt="" width="200" height="313" /></p>
]]></content:encoded>
			<wfw:commentRss>http://mschuette.name/wp/2008/07/digital-vs-analog-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The State of transport-tls and its Implementation</title>
		<link>http://mschuette.name/wp/2008/07/the-state-of-transport-tls-and-its-implementation/</link>
		<comments>http://mschuette.name/wp/2008/07/the-state-of-transport-tls-and-its-implementation/#comments</comments>
		<pubDate>Wed, 02 Jul 2008 00:36:32 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[english]]></category>
		<category><![CDATA[GSoC08]]></category>
		<category><![CDATA[Syslog]]></category>
		<category><![CDATA[syslogd]]></category>
		<category><![CDATA[tls]]></category>
		<category><![CDATA[transport-tls]]></category>

		<guid isPermaLink="false">http://mschuette.name/wp/?p=77</guid>
		<description><![CDATA[Now the latest internet draft for transport-tls is out for two weeks now and it looks like a consensus on the text is found &#8212; at least there were no comments so far. I spent the better part of these two weeks changing and debugging my own implementation of transport-tls, which is far beyond the [...]]]></description>
			<content:encoded><![CDATA[<p>Now <a href="http://tools.ietf.org/html/draft-ietf-syslog-transport-tls-13">the latest internet draft for transport-tls</a> is out for two weeks now and it looks like a consensus on the text is found &#8212; at least there were no comments so far. I spent the better part of these two weeks changing and debugging my own implementation of transport-tls, which is far beyond the schedule but at least in time to have a working and usable program for mid-term evaluation&#8230;</p>
<p>So this is a good time to re-read the draft and check its requirements against my current syslogd code:</p>
<blockquote><p>The TCP port NNN has been allocated as the default port for syslog over TLS, as defined in this document.</p></blockquote>
<p>Nothing to do here as syslogd depends on <code>/etc/services</code> for its port (unless configured otherwise).</p>
<blockquote><p>Implementations MUST support TLS 1.2 [I-D.ietf-tls-rfc4346-bis] and are REQUIRED to support the mandatory to implement cipher suite, which is TLS_RSA_WITH_AES_128_CBC_SHA.  This document is assumed to apply to future versions of TLS, in which case the mandatory to implement cipher suite for the implemented version MUST be supported.</p></blockquote>
<p>I depend on OpenSSL to implement this.</p>
<blockquote><p>Both syslog transport sender (TLS Client) and syslog transport receiver (TLS server) MUST implement certificate-based authentication.<br />
o  Certification path validation: The TLS peer is configured with one or more trust anchors (typically root CA certificates), which allow it to verify a binding between the subject name and the public key.</p></blockquote>
<p>Check.</p>
<blockquote><p>Implementations MUST support certificate fingerprints in Section 4.2.2 and MAY allow other formats for end-entity certificates such as a DER encoded certificate.</p></blockquote>
<p>Check for both.</p>
<blockquote><p>Both transport receiver and transport sender implementations MUST provide a means to generate a key pair and self-signed certificate in the case that a key pair and certificate are not available through another mechanism.</p></blockquote>
<p>Coming soon&#8230;</p>
<p><strong>Update (for completeness):</strong> Now implemented. When given a config option and the certificate/key files cannot be read, then a 1024-bit RSA key is created and used for a self-signed X.509 certificate with the hostname as CN.</p>
<blockquote><p>The transport receiver and transport sender SHOULD provide mechanisms to record the end-entity certificate for the purpose of correlating it with the sent or received data.</p></blockquote>
<p>In form of a log message:<br />
<code>Accept client certificate from 127.0.0.1 due to matching hostname/subject.Subject is "localhost", fingerprint is "SHA1:E4:E1:A6:1C:D4:31:D7:D4:9B:B8:DC:DF:DD:CE:30:71:46:00:92:C9"</code></p>
<blockquote><p>Both client and server implementations MUST make the certificate fingerprints for their certificate available through a management interface.</p></blockquote>
<p>Could I say the shell is my &#8220;management interface&#8221; and provides the fingerprints with &#8220;<code>openssl x509 -in xyz.crt -noout -fingerprint</code>&#8220;?  :-)</p>
<p>Anyway, the used certificate is logged on server start and looks like this:<br />
<code>syslogd: Initialize SSL context using library "OpenSSL 0.9.8h 28 May 2008". Load certificate from file "localhost.crt" with CN "localhost" and fingerprint "SHA1:E4:E1:A6:1C:D4:31:D7:D4:9B:B8:DC:DF:DD:CE:30:71:46:00:92:C9"</code></p>
<blockquote><p>Implementations MUST support SHA-1 as the hash algorithm and use the ASCII label &#8220;SHA1&#8243; to identify the SHA-1 algorithm.</p></blockquote>
<p>Hashing is provided by OpenSSL again; syslogd will support/recognize all algorithms that OpenSSL&#8217;s <code>EVP_get_digestbyname()</code> supports.</p>
<blockquote><p>Syslog applications SHOULD be implemented in a manner that permits administrators, as a matter of local policy, to select the cryptographic level and authentication options they desire.</p></blockquote>
<p>There are different ways to authenticate the peer&#8217;s certificate.<br />
The cryptographic level is not configurable, because I do not see the demand for that. (If indeed required then every OpenSSL setting, especially the list of usable ciphers, could be turned into a syslog.conf option.)</p>
<blockquote><p>TLS permits the resumption of an earlier TLS session or the use of another active session when a new session is requested, in order to save the expense of another full TLS handshake.  The security parameters of the resumed session are reused for the requested session.  The security parameters SHOULD be checked against the security requirement of the requested session to make sure that the resumed session provides proper security.</p></blockquote>
<p>I do not implement TLS session resumption, because I expect a syslogd TLS connection to last for some hours or days so the handshake cost is negligible.</p>
<blockquote><p>All syslog messages MUST be sent as TLS &#8220;application data&#8221;.</p></blockquote>
<p>Check.</p>
<blockquote><p>A transport receiver MUST use the message length to delimit a syslog message.  There is no upper limit for a message length per se.  However, in order to establish a baseline for interoperability, this specification requires that a transport receiver MUST be able to process messages with a length up to and including 2048 octets.  Transport receiver SHOULD be able to process messages with lengths up to and including 8192 octets.</p></blockquote>
<p>syslogd has no fixed limits on message lengths. On connection establishment a 2048 byte input buffer is allocated, longer messages will cause a realloc(). If that fails, then one message will be skipped.</p>
<blockquote><p>A TLS client MUST close the associated TLS connection if the connection is not expected to deliver any syslog messages later.</p></blockquote>
<p>I wrote a syslogd &#8212; it always expects to deliver more messages  ;-)</p>
<blockquote><p>It MUST send a TLS close_notify alert before closing the connection.  A client MAY choose to not wait for the server&#8217;s close_notify alert and simply close the connection, thus generating an incomplete close on the server side.  Once the server gets a close_notify from the client, it MUST reply with a close_notify unless it becomes aware that the connection has already been closed by the client (e.g., the closure was indicated by TCP).</p></blockquote>
<p>Check. Although I make no difference between client and server mode and always shutdown the TLS connection.</p>
<blockquote><p>When no data is received from a connection for a long time (where the application decides what &#8220;long&#8221; means), a server MAY close the connection.</p></blockquote>
<p>There is no timeout implemented.</p>
<blockquote><p>Implementations MUST support specifying the authorized peers using certificate fingerprints, as described in Section 4.2.1 and Section 4.2.2.</p></blockquote>
<p>Check.</p>
<blockquote><p>Implementations MUST support specifying the authorized peers using locally configured host names, MUST support certification path validation [RFC5280] and matching the name with the certificate as follows: [...]</p></blockquote>
<p>I match a given subject against SubjectAltName/dNSName, SubjectAltName/ipAddress, and commonName.<br />
I just do not support the wildcard matching for hostnames (which is a MAY). I do want to but it has a really low priority on my TODO-list.</p>
]]></content:encoded>
			<wfw:commentRss>http://mschuette.name/wp/2008/07/the-state-of-transport-tls-and-its-implementation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>on OpenSSL and documentation &#8230;</title>
		<link>http://mschuette.name/wp/2008/06/on-openssl-and-documentation/</link>
		<comments>http://mschuette.name/wp/2008/06/on-openssl-and-documentation/#comments</comments>
		<pubDate>Mon, 02 Jun 2008 13:58:41 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[english]]></category>
		<category><![CDATA[GSoC08]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[openssl]]></category>

		<guid isPermaLink="false">http://mschuette.name/wp/?p=72</guid>
		<description><![CDATA[I think OpenSSL needs a documentation project. My first week of GSoC coding was dedicated to transport-tls, so I started with establishing a TLS connection and accessing different parts of the X.509 certificates to check them. I would have thought these are basic tasks for every TLS-enabled application and yet I found this unexpectedly difficult. [...]]]></description>
			<content:encoded><![CDATA[<p>I think OpenSSL needs a documentation project. My first week of GSoC coding was dedicated to transport-tls, so I started with establishing a TLS connection and accessing different parts of the X.509 certificates to check them. I would have thought these are basic tasks for every TLS-enabled application and yet I found this unexpectedly difficult.</p>
<p>A typical task (like &#8220;how do I get the commonName from this?&#8221;) starts with <code>fgrep -r <em>xyz</em> ./openssl</code>, looking for likely function names in the <code>.h</code> files. Since many functions are not documented in man pages this is followed by grepping all <code>#define</code>s for it (preprocessor macros are used extensively) and finding the real implementation with source code to figure out if it does what I need. Sometimes the next step is even copying/reimplementing the found function, because often there are functions to output a structure to a BIO (the I/O abstraction layer) but not to copy its data as a string to work with it.</p>
<p>Several factors contribute to that:</p>
<ul>
<li>There is more than one way to do it. You can use BIOs for everything or manage sockets and file descriptors yourself; or you can call (e.g.) <code>bio_print_NID(x)</code> or <code>get_data_by_NID(x)</code> or <code>get_data_by_OBJ(NID2OBJ(x))</code>. While it is good that every object has a pretty complete set of methods/functions, this makes it hard to reuse existing code or follow a documentation.</li>
<li>Documentation structure. Most parts of OpenSSL are object-oriented. It seems to me that a Javadoc-like documentation is better for that, because it maps the class/object structure and allows you to see what data is held and which methods exist to access it. The man page structure seems to be more apropriate for things like system calls where the functions are mostly independent and functionally orthogonal. OpenSSL shows this because although the existing man pages are pretty good, those written for a single function give too little information for the larger task, and many man pages describe 5-10 functions at once because they access the same object.</li>
<li>Knowledge not written down. The OpenSSL mailing lists probably contain more information than the man pages. Searching the lists answers many questions because they were asked before and quickly answered by the developers. &#8212; Their answers just did not make it into a documentation.</li>
<li>Not always clear APIs. Some technically unnecessary access methods are not implemented, probably because the developers knew that they could just access the underlying <code>struct</code>. I also found several code snippets (even given as advice on the mailing list) that implicitly assume data types to be equal or direct access to certain structure fields. This makes it harder to find the right methods.</li>
</ul>
<p>Of course I know how an open source project works, and I am not the one to complain about missing functions because I do not have the time to implement them either (although I do think it is time to finally IPv6-enable the network-BIOs ;)</p>
<p>But OpenSSL seems to be too important to be left with so little good documentation on how to use it correctly (and securely). This all reminds me of Cyrus SASL, which has similar problems because we all have to rely on it but really few people understand it  :-(</p>
]]></content:encoded>
			<wfw:commentRss>http://mschuette.name/wp/2008/06/on-openssl-and-documentation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>reliable TCP reconnect made easy</title>
		<link>http://mschuette.name/wp/2008/05/reliable-tcp-reconnect-made-easy/</link>
		<comments>http://mschuette.name/wp/2008/05/reliable-tcp-reconnect-made-easy/#comments</comments>
		<pubDate>Wed, 28 May 2008 22:53:52 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[english]]></category>
		<category><![CDATA[GSoC08]]></category>
		<category><![CDATA[Syslog]]></category>
		<category><![CDATA[relp]]></category>
		<category><![CDATA[socket]]></category>
		<category><![CDATA[tcp]]></category>

		<guid isPermaLink="false">http://mschuette.name/wp/?p=71</guid>
		<description><![CDATA[When I came to work on Syslog one of the most disturbing texts I came across was Rainer&#8217;s observation &#8220;On the (un)reliability of plain tcp syslog&#8230;&#8220;. The problem is that a sendmsg() system call is nearly always successful &#8212; it only indicates local errors (like a full send queue), but no network errors. So even [...]]]></description>
			<content:encoded><![CDATA[<p>When I came to work on Syslog one of the most disturbing texts I came across was Rainer&#8217;s observation &#8220;<a href="http://blog.gerhards.net/2008/04/on-unreliability-of-plain-tcp-syslog.html">On the (un)reliability of plain tcp syslog&#8230;</a>&#8220;. The problem is that a <code>sendmsg()</code> system call is nearly always successful &#8212; it only indicates local errors (like a full send queue), but no network errors. So even after the other side initiated a connection shutdown one can happily write into the local buffer and only get an error on the second write.</p>
<p>Most applications and protocols use a request-response or a session model and do not have problems with this, because they simply reset their status on connection loss and start again. Syslog is different because it does not use a backchannel (for acks or other server responses) and completely relies on the one-direction channel for server and client to synchronize their states over long periods of time <em>and</em> across connection losses. After reading Rainer&#8217;s text it took me some time to believe the problem described, and even then I saw the words and accepted the reasoning, but it still felt wrong to believe in them.</p>
<p>This week I began my own Syslog programming with a small client/server program to test different IPC protocols; and the plain TCP variant nicely confirmed the observation above. Only after trying SCTP which did not have that problem, I realized that we asked the wrong question. (I did not dig into it but I guess the socket is marked broken really fast on connection shutdown, so the first write to it returns an error  immediately). &#8212; <code>sendmsg()</code> is not our only interface to the TCP-layer and if <code>sendmsg()</code> does not tell us whether a connection is still established then we just have to use another interface.</p>
<p>My first experiment lead to a bad solution: I found that Linux and FreeBSD have a <code>struct tcp_info</code> with TCP state information that can be accessed with <code>getsockopt()</code>. This allows us to always check if the connection is still established:</p>
<blockquote>
<pre>getsockopt(sock, IPPROTO_TCP, TCP_INFO, &amp;tinfo, &amp;tinfo_size)
if (tinfo.tcpi_state != TCPS_ESTABLISHED) {
  if (sock) { close(sock); }
  /* reconnect */
}
/* send() */
</pre>
</blockquote>
<p>After that I finally found the good and really simple solution: Just use <code>recv()</code> to check on the connection status. On connection shutdown <code>recv()</code> immediately indicates that the socket is unavailable and the application can react upon it by reconnecting:</p>
<blockquote>
<pre>rc = recv(sock, msgbuf, BUFSIZE, MSG_DONTWAIT | MSG_PEEK);
if (!rc) {
    if (errno == EAGAIN) {
        /* server closed connection */
        connected = 0;
    } else {
        perror("Error in recv()");
    }
}
if (!connected) {
    /* (re)connect */
    connected = 1;
}
/* send() */
</pre>
</blockquote>
<p><a href="https://barney.cs.uni-potsdam.de/trac/syslogd/browser/trunk/testing/tcp">Source code is online in my Trac</a>. Note that the <code>tcp_info</code> version only works on FreeBSD; on Linux I did not find the necessary header files yet and NetBSD does not support <code>tcp_info</code> (bad solution anyway).</p>
<p><strong>Update</strong>: Just a note on the intention and the kind of problem that is solved here. TCP has no atomic and synchronous send. Period and no need to argue.</p>
<p>With &#8220;real&#8221; network problems TCP does not show errors immediately because it was practically designed not to. (I have already worked on failur tolerance in a cluster computing environment and there are similar problems.)</p>
<p>The main problem I want to improve on is the simple LAN without connection or even packet loss. Where it is really unnecessary (and annoying) for a TCP-based syslog to derministically loose messages on a server reload, just because the client does not react upon a nice and clean connection shutdown.</p>
<p><strong>Later Update (22.6.):</strong> One obvious problem is the additional system call per socket operation. So I am quite happy I do not have to use this in the BSD <a href="http://netbsd-soc.sourceforge.net/projects/syslogd/">syslogd implementation</a>. I found it much easier to register a BSD <a href="http://www.freebsd.org/cgi/man.cgi?query=kqueue&amp;manpath=NetBSD+4.0"><em>kernel event</em></a> on the socket. That way the kernel immediately notifies the application when there is either data to read from the socket or when it is closed.</p>
]]></content:encoded>
			<wfw:commentRss>http://mschuette.name/wp/2008/05/reliable-tcp-reconnect-made-easy/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Google Summer of Code</title>
		<link>http://mschuette.name/wp/2008/04/google-summer-of-code/</link>
		<comments>http://mschuette.name/wp/2008/04/google-summer-of-code/#comments</comments>
		<pubDate>Mon, 21 Apr 2008 23:52:49 +0000</pubDate>
		<dc:creator>Martin</dc:creator>
				<category><![CDATA[english]]></category>
		<category><![CDATA[GSoC08]]></category>
		<category><![CDATA[Syslog]]></category>

		<guid isPermaLink="false">http://mschuette.name/wp/?p=66</guid>
		<description><![CDATA[Today the participants in Google&#8217;s Summer of Code 2008 were announced. &#8211; And my project was chosen. :-) So now I will work for NetBSD and implement the new IETF syslog protocols.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.netbsd.org/"><img class="alignleft" style="float: left;" src="http://mschuette.name/wp/wp-upload/NetBSD-smaller-old.jpg" alt="NetBSD Logo" width="245" height="243" /></a></p>
<p>Today the participants in <a href="http://code.google.com/soc/2008/">Google&#8217;s Summer of Code 2008</a> were announced. &#8211; And <a href="http://code.google.com/soc/2008/netbsd/appinfo.html?csaid=B5296DDFACC3E192">my project</a> was chosen. :-)</p>
<p>So now I will work for <a href="http://www.netbsd.org/">NetBSD</a> and implement the new <a href="http://tools.ietf.org/wg/syslog/">IETF syslog protocols</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://mschuette.name/wp/2008/04/google-summer-of-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

