<!--
  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.
-->
<html>
<head>
<title>Starting and Stopping the Derby Network Server</title>
</head>
<body>
<h2>Starting and Stopping the Derby Network Server</h2>
<p>
The Derby Network Server for the host running Eclipse can be started and 
stopped within Eclipse.  Multiple network servers can be started 
using this option by changing the port number the Derby Network 
Server listens on. 
</p>
<p>
<h3><a href="start_server.html">Starting the Derby Network Server</a></h3>
</p>
<p>
Multiple Derby Network Servers can be started on the host running Eclipse 
using this menu option.  Additionally, the Derby Network Server can be
started using the ip address of the host running Eclipse to allow remote 
client access to the network server.
</p>
<p>
<h3><a href="stop_server.html">Stopping the Derby Network Server</a></h3>
</p>
<p>
Any Derby Network Server started from within Eclipse can be stopped using this menu option.
</p>
<p>
</p>
</body>
</html>
