<!--
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with
 this work for additional information regarding copyright ownership.
 The ASF licenses this file to You under the Apache License, Version 2.0
 (the "License"); you may not use this file except in compliance with
 the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.

-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<Head><link rel="stylesheet" href="stylesheet.css" type="text/css"></head>
<body>
<B>Socket Receiver</b>
<p>SocketReceiver compliments the SocketAppender. </p>

<p>SocketReceiver listens
on a specified port, accepting connections from remote sockets
, de-serializes logging events received from these sockets,
and posts them into Chainsaw's local Log4j environment allowing you 
to view them.</p>
<p>Click here to see more information about SocketReceiver.</p>

<p>Click <a href="http://jakarta.apache.org/log4j/docs/api/org/apache/log4j/net/SocketAppender.html">here</a> to see more information about SocketAppender.</p>
</body>
</html>