goahead 流程

goahead 流程,第1张

概述原文:https://blog.csdn.net/qq_32419007/article/details/80756643  1.全局变量 Web服务器的根目录     static char_t        *rootWeb= T("/etc_ro/web"); 端口号     static int                     port= 80; 尝试次数     static i


原文:https://blog.csdn.net/qq_32419007/article/details/80756643 

1.全局变量

Web服务器的根目录

    static char_t        *rootWeb= T("/etc_ro/web");

端口号

    static int                     port= 80;

尝试次数

    static int                     retrIEs= 5;

 

2.initWebs()
1.用到的全局变量的初始化,打开sym hash table、打开用户管理,注册UM tables

2.设置UM信息

3.设置网页的根目录

    sprintf(webdir,"%s",rootWeb);

    websSetDefaultDir(webdir)

4.设置默认访问页

    websSetDefaultPage(T("default.asp"));

5.Web服务器端口和重试次数

    websOpenServer(port,retrIEs);

 

6.定义安全性处理程序,表单处理程序,默认网页处理程序

    websUrlHandlerdefine(T(""),NulL,websSecurityHandler,

                         WEBS_HANDLER_FirsT);

    websUrlHandlerdefine(T("/goform"),websFormHandler,0);

    websUrlHandlerdefine(T("/cgi-bin"),websCgiHandler,0);

    websUrlHandlerdefine(T(""),websDefaultHandler,

                  WEBS_HANDLER_LAST);

 

7.定义自己的功能

formdefineDvbs();

       formdefineUtilitIEs();

       formdefineInternet();

#if definedCONfig_RAlinkAPP_SWQOS

       formdefineQoS();

#endif

#if definedCONfig_RAlinkAPP_HWQOS

       formdefineQoS();

#endif

#if (definedCONfig_USB) || (defined CONfig_MMC)

       formdefineUSB();

#endif

#if definedCONfig_RAlinkAPP_MPLAYER

       formdefineMedia();

#endif

       formdefineWireless();

#if defined(RTDEV_SUPPORT)

       formdefineInic();

#elif defined(CONfig_RT2561_AP) || defined (CONfig_RT2561_AP_MODulE)

       formdefineLegacy();

#endif

#if definedCONfig_RT2860V2_STA || defined CONfig_RT2860V2_STA_MODulE || \

       defined (CONfig_RLT_STA_SUPPORT)

       formdefineStation();

#endif

       formdefineFirewall();

       formdefineManagement();

 

8.为默认主页创建一个处理程序

    websUrlHandlerdefine(T("/"),websHomePageHandler,0);

 

3. websSecurityHandler()
1.     (flags& WEBS_LOCAL_REQUEST) && (deBUGSecurity == 0) 可以访问

2.     am ==AM_NONE 输出404,page not found

3.     用户名不存在 输出401(身份验证)

        判断用户是否能访问该路径,不能则输出403(服务器拒绝)

        获取用户密码,不匹配则输出401

        获取摘要认证字符串,不匹配则输出401

4.认证方法不为AM_FulL,输出401

 

4.socketReady()
       socketReady函数检查已建立连接的socket中是否有以下事件,如果检查到其中一个,返回1,否则返回0

1.根据传入的sID遍历socketList(sID<0)

2.sp->flags & SOCKET_CONNreset

该socket的flag标志为SOCKET_CONNreset(uemf.h),则调用函数socketCloseConnection关闭socket连接,然后返回0

3.sp->currentEvents &  sp->handlerMask

如果该socket当前事件和他要处理的事件相同,返回1,告诉调用socketReady的函数有socket准备好被处理了

4.sp->handlerMask & SOCKET_READABLE &&socketinputBuffered(sID) > 0

如果该socket要处理的事件是SOCKET_READABLE并且该socket的缓存中有可读的数据,则调用socketSelect函数,然后返回1,告诉调用socketReady的函数有socket准备好被处理了

 

5.   socketSelect()
函数首先把各个sock感兴趣的事件(sp->handlerMask)注册给三个集合(读、写、例外),然后调用select系统调用,更新各个sock的sp->currentEvent表示各个sock的当前状态
这两个函数在sockGen.c中实现,主要 *** 作的数据是socket_t变量socketList中的handlerMask和currentEvents,socketList在sock.c中定义并主要在该文件中socketAlloc,socketFree,socketPrt三个函数中维护

 

6.socketProcess()
1.socketDoEvent函数首先对socket的当前事件进行检查,如果是读事件并且是服务器监听socket上的读事件,说明有新连接到来,调用socketAccept()欢迎新连接,并使currentEvents为0,然后返回。

2.如果当前不是读事件但是该socket原感兴趣的读事件并socket缓存中确有数据可读,那就置currentEvents为可读

3.如果当前是写事件,那就看看该socket的写缓存中有没有数据,如果有并且有SOCKET_FLUSHING标志就全部输出该写缓存,这是为新的写事件做清理

4.调用事件处理函数sp-handler,该函数指针分别在两个地方进行初始化

(1)   在wbsDefaulthandler()函数中注册写事件

(2)   在websAccept()函数中注册读事件

5.把currentEvent置为0

总结

以上是内存溢出为你收集整理的goahead 流程全部内容,希望文章能够帮你解决goahead 流程所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1017224.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存