Dolda2000 GitWeb
/
jsvc.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'master' of git.dolda2000.com:/srv/git/r/jsvc
[jsvc.git]
/
src
/
dolda
/
jsvc
/
scgi
/
Server.java
diff --git
a/src/dolda/jsvc/scgi/Server.java
b/src/dolda/jsvc/scgi/Server.java
index
f01eae9
..
f8d4637
100644
(file)
--- a/
src/dolda/jsvc/scgi/Server.java
+++ b/
src/dolda/jsvc/scgi/Server.java
@@
-8,6
+8,7
@@
import java.util.*;
public abstract class Server implements Runnable {
private final ServerSocket sk;
private final Logger logger = Logger.getLogger("dolda.jsvc.scgi");
public abstract class Server implements Runnable {
private final ServerSocket sk;
private final Logger logger = Logger.getLogger("dolda.jsvc.scgi");
+ private boolean running = false;
public String headcs = "UTF-8";
public Server(ServerSocket sk) {
public String headcs = "UTF-8";
public Server(ServerSocket sk) {
@@
-97,7
+98,12
@@
public abstract class Server implements Runnable {
public void run() {
try {
try {
public void run() {
try {
try {
- while(true) {
+ synchronized(this) {
+ if(running)
+ throw(new IllegalStateException("SCGI server is already running"));
+ running = true;
+ }
+ while(running) {
Socket nsk = sk.accept();
serve(nsk);
}
Socket nsk = sk.accept();
serve(nsk);
}
@@
-105,7
+111,26
@@
public abstract class Server implements Runnable {
sk.close();
}
} catch(IOException e) {
sk.close();
}
} catch(IOException e) {
- logger.log(Level.SEVERE, "SCGI server encountered I/O error", e);
+ if((e instanceof SocketException) && !running) {
+ /* Assume that stop() has closed the socket. */
+ } else {
+ logger.log(Level.SEVERE, "SCGI server encountered I/O error", e);
+ }
+ } finally {
+ shutdown();
+ running = false;
}
}
}
}
+
+ public void stop() {
+ try {
+ running = false;
+ sk.close();
+ } catch(IOException e) {
+ throw(new RuntimeException(e));
+ }
+ }
+
+ protected void shutdown() {
+ }
}
}