int websvxmain(int argc, char **argv) { /* * Initialize the memory allocator. Allow use of malloc and start * with a 60K heap. For each page request approx 8KB is allocated. * 60KB allows for several concurrent page requests. If more space * is required, malloc will be used for the overflow. */ bopen(NULL, (60 * 1024), B_USE_MALLOC); /* * Initialize the web server */ finished = 0; if (initWebs() < 0) { return -1; } #ifdef WEBS_SSL_SUPPORT websSSLOpen(); #endif /* * Basic event loop. SocketReady returns true when a socket is ready for * service. SocketSelect will block for two seconds or until an event * occurs. SocketProcess will actually do the servicing. */ while (!finished) { if (socketReady(-1) || socketSelect(-1, 2000)) { socketProcess(-1); } websCgiCleanup(); emfSchedProcess(); } #ifdef WEBS_SSL_SUPPORT websSSLClose(); #endif #ifdef USER_MANAGEMENT_SUPPORT umClose(); #endif /* * Close the socket module, report memory leaks and close the memory allocator */ websCloseServer(); websDefaultClose(); socketClose(); symSubClose(); #ifdef B_STATS memLeaks(); #endif bclose(); return 0; }
static void rtems_httpd_daemon(rtems_task_argument args) { /* * Initialize the memory allocator. Allow use of malloc and start with a * 10K heap. */ bopen(NULL, (10 * 1024), B_USE_MALLOC); /* * Initialize the web server */ if (initWebs() < 0) { rtems_panic("Unable to initialize Web server !!\n"); } #ifdef WEBS_SSL_SUPPORT websSSLOpen(); #endif /* * Basic event loop. SocketReady returns true when a socket is ready for * service. SocketSelect will block until an event occurs. SocketProcess * will actually do the servicing. */ while (!finished) { if (socketReady(-1) || socketSelect(-1, 2000)) { socketProcess(-1); } /*websCgiCleanup();*/ emfSchedProcess(); } #ifdef WEBS_SSL_SUPPORT websSSLClose(); #endif #ifdef USER_MANAGEMENT_SUPPORT umClose(); #endif /* * Close the socket module, report memory leaks and close the memory allocator */ websCloseServer(); websDefaultClose(); socketClose(); symSubClose(); #if B_STATS memLeaks(); #endif bclose(); rtems_task_delete( RTEMS_SELF ); }
static void websTermSigHandler(int signo) { if (signo == SIGTERM) { finished = 1; } else if (signo == SIGKILL) { #ifdef WEBS_SSL_SUPPORT websSSLClose(); #endif #ifdef USER_MANAGEMENT_SUPPORT umClose(); #endif websCloseServer(); websDefaultClose(); socketClose(); symSubClose(); #ifdef B_STATS memLeaks(); #endif bclose(); exit(1); } }
/********************************************************************************************************* ** 函数名称: websStart ** 功能描述: 启动 GoAhead web 服务器 ** 输 入 : addr 主机地址 ** path web 路径 ** port 端口号 ** 输 出 : 0 ** 全局变量: ** 调用模块: *********************************************************************************************************/ int websStart(char *addr, char *path, int port) { /* * Initialize the memory allocator. Allow use of malloc and start * with a 60K heap. For each page request approx 8KB is allocated. * 60KB allows for several concurrent page requests. If more space * is required, malloc will be used for the overflow. */ bopen(NULL, (60 * 1024), B_USE_MALLOC); /* * Initialize the web server */ if (websInit(addr, path, port) < 0) { return -1; } #ifdef WEBS_SSL_SUPPORT websSSLOpen(); #endif /* * Basic event loop. SocketReady returns true when a socket is ready for * service. SocketSelect will block for two seconds or until an event * occurs. SocketProcess will actually do the servicing. */ running = TRUE; while (!running) { if (socketReady(-1) || socketSelect(-1, 2000)) { socketProcess(-1); } websCgiCleanup(); emfSchedProcess(); } #ifdef WEBS_SSL_SUPPORT websSSLClose(); #endif #ifdef USER_MANAGEMENT_SUPPORT umClose(); #endif /* * Close the socket module, report memory leaks and close the memory allocator */ websCloseServer(); websDefaultClose(); socketClose(); symSubClose(); #ifdef B_STATS { char *argv[2]; argv[0] = "goaheadmemleak"; argv[1] = "\0"; memLeaks(1, argv); /* print message on stdout */ } #endif bclose(); if (logFile != NULL) { fclose(logFile); logFile = NULL; } return 0; }