Fossil SCM

Add the --stopper option to the "ui" and "server" commands on windows. The argument is the name of a file, which if it exists, causes the server to abort upon receiving the next inbound TCP connection. Use this to shut down fossil servers running as a windows service.

drh 2010-01-18 22:23 trunk
Commit 23c0d16718b1b0853fac8d5099bbd2981a1a2fa6
2 files changed +6 -1 +9 -1
+6 -1
--- src/main.c
+++ src/main.c
@@ -822,10 +822,15 @@
822822
void cmd_webserver(void){
823823
int iPort, mxPort;
824824
const char *zPort;
825825
char *zBrowser;
826826
char *zBrowserCmd = 0;
827
+
828
+#ifdef __MINGW32__
829
+ const char *zStopperFile; /* Name of file used to terminate server */
830
+ zStopperFile = find_option("stopper", 0, 1);
831
+#endif
827832
828833
g.thTrace = find_option("th-trace", 0, 0)!=0;
829834
if( g.thTrace ){
830835
blob_zero(&g.thLog);
831836
}
@@ -885,8 +890,8 @@
885890
if( g.argv[1][0]=='u' ){
886891
zBrowser = db_get("web-browser", "start");
887892
zBrowserCmd = mprintf("%s http://127.0.0.1:%%d/", zBrowser);
888893
}
889894
db_close();
890
- win32_http_server(iPort, mxPort, zBrowserCmd);
895
+ win32_http_server(iPort, mxPort, zBrowserCmd, zStopperFile);
891896
#endif
892897
}
893898
--- src/main.c
+++ src/main.c
@@ -822,10 +822,15 @@
822 void cmd_webserver(void){
823 int iPort, mxPort;
824 const char *zPort;
825 char *zBrowser;
826 char *zBrowserCmd = 0;
 
 
 
 
 
827
828 g.thTrace = find_option("th-trace", 0, 0)!=0;
829 if( g.thTrace ){
830 blob_zero(&g.thLog);
831 }
@@ -885,8 +890,8 @@
885 if( g.argv[1][0]=='u' ){
886 zBrowser = db_get("web-browser", "start");
887 zBrowserCmd = mprintf("%s http://127.0.0.1:%%d/", zBrowser);
888 }
889 db_close();
890 win32_http_server(iPort, mxPort, zBrowserCmd);
891 #endif
892 }
893
--- src/main.c
+++ src/main.c
@@ -822,10 +822,15 @@
822 void cmd_webserver(void){
823 int iPort, mxPort;
824 const char *zPort;
825 char *zBrowser;
826 char *zBrowserCmd = 0;
827
828 #ifdef __MINGW32__
829 const char *zStopperFile; /* Name of file used to terminate server */
830 zStopperFile = find_option("stopper", 0, 1);
831 #endif
832
833 g.thTrace = find_option("th-trace", 0, 0)!=0;
834 if( g.thTrace ){
835 blob_zero(&g.thLog);
836 }
@@ -885,8 +890,8 @@
890 if( g.argv[1][0]=='u' ){
891 zBrowser = db_get("web-browser", "start");
892 zBrowserCmd = mprintf("%s http://127.0.0.1:%%d/", zBrowser);
893 }
894 db_close();
895 win32_http_server(iPort, mxPort, zBrowserCmd, zStopperFile);
896 #endif
897 }
898
+9 -1
--- src/winhttp.c
+++ src/winhttp.c
@@ -134,17 +134,22 @@
134134
135135
/*
136136
** Start a listening socket and process incoming HTTP requests on
137137
** that socket.
138138
*/
139
-void win32_http_server(int mnPort, int mxPort, char *zBrowser){
139
+void win32_http_server(
140
+ int mnPort, int mxPort, /* Range of allowed TCP port numbers */
141
+ char *zBrowser, /* Command to launch browser. (Or NULL) */
142
+ char *zStopper /* Stop server when this file is exists (Or NULL) */
143
+){
140144
WSADATA wd;
141145
SOCKET s = INVALID_SOCKET;
142146
SOCKADDR_IN addr;
143147
int idCnt = 0;
144148
int iPort = mnPort;
145149
150
+ if( zStopper ) unlink(zStopper);
146151
if( WSAStartup(MAKEWORD(1,1), &wd) ){
147152
fossil_fatal("unable to initialize winsock");
148153
}
149154
while( iPort<=mxPort ){
150155
s = socket(AF_INET, SOCK_STREAM, 0);
@@ -187,10 +192,13 @@
187192
SOCKADDR_IN client_addr;
188193
HttpRequest *p;
189194
int len = sizeof(client_addr);
190195
191196
client = accept(s, (struct sockaddr*)&client_addr, &len);
197
+ if( zStopper && file_size(zStopper)>=0 ){
198
+ break;
199
+ }
192200
if( client==INVALID_SOCKET ){
193201
closesocket(s);
194202
fossil_fatal("error from accept()");
195203
}
196204
p = malloc( sizeof(*p) );
197205
--- src/winhttp.c
+++ src/winhttp.c
@@ -134,17 +134,22 @@
134
135 /*
136 ** Start a listening socket and process incoming HTTP requests on
137 ** that socket.
138 */
139 void win32_http_server(int mnPort, int mxPort, char *zBrowser){
 
 
 
 
140 WSADATA wd;
141 SOCKET s = INVALID_SOCKET;
142 SOCKADDR_IN addr;
143 int idCnt = 0;
144 int iPort = mnPort;
145
 
146 if( WSAStartup(MAKEWORD(1,1), &wd) ){
147 fossil_fatal("unable to initialize winsock");
148 }
149 while( iPort<=mxPort ){
150 s = socket(AF_INET, SOCK_STREAM, 0);
@@ -187,10 +192,13 @@
187 SOCKADDR_IN client_addr;
188 HttpRequest *p;
189 int len = sizeof(client_addr);
190
191 client = accept(s, (struct sockaddr*)&client_addr, &len);
 
 
 
192 if( client==INVALID_SOCKET ){
193 closesocket(s);
194 fossil_fatal("error from accept()");
195 }
196 p = malloc( sizeof(*p) );
197
--- src/winhttp.c
+++ src/winhttp.c
@@ -134,17 +134,22 @@
134
135 /*
136 ** Start a listening socket and process incoming HTTP requests on
137 ** that socket.
138 */
139 void win32_http_server(
140 int mnPort, int mxPort, /* Range of allowed TCP port numbers */
141 char *zBrowser, /* Command to launch browser. (Or NULL) */
142 char *zStopper /* Stop server when this file is exists (Or NULL) */
143 ){
144 WSADATA wd;
145 SOCKET s = INVALID_SOCKET;
146 SOCKADDR_IN addr;
147 int idCnt = 0;
148 int iPort = mnPort;
149
150 if( zStopper ) unlink(zStopper);
151 if( WSAStartup(MAKEWORD(1,1), &wd) ){
152 fossil_fatal("unable to initialize winsock");
153 }
154 while( iPort<=mxPort ){
155 s = socket(AF_INET, SOCK_STREAM, 0);
@@ -187,10 +192,13 @@
192 SOCKADDR_IN client_addr;
193 HttpRequest *p;
194 int len = sizeof(client_addr);
195
196 client = accept(s, (struct sockaddr*)&client_addr, &len);
197 if( zStopper && file_size(zStopper)>=0 ){
198 break;
199 }
200 if( client==INVALID_SOCKET ){
201 closesocket(s);
202 fossil_fatal("error from accept()");
203 }
204 p = malloc( sizeof(*p) );
205

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button