_HEADER。
按程序的流程,这个时候仍在循环中,马上就会转到 WEBS_HEADER 状态机,但是会这样吗? (2)WEBS_HEADER,首先(1)以后(经过 WEBS_BEGIN),除非 websGetInput 函数调用不成功,否则就会执行到 WEBS_HEADER 状态机,这个时候我们就要看看 websGetInput函数了,因为这个函数如果调用不成 功,是不会执行到 WEBS_HEADER 的。
websGetInput函数分析: 函数功能:接收客户端的数据; 函数返回值:-1,表示出错或者请求已经被处理 0, 表示告诉调用者还有更多的数据待读取 1, 表示数据已经读好。
websGetInput函数的处理过程: 注意上图中的两个注解,1 是读取 socket 时,一次最多读 256 个字节,2 是 post 的数 据长度在websParseRequestwp函数中得到,也就是说如果一个连接首次调用 websGetInput函数,应该执行的是0 的那 条分支。
下面试着走一个流程,当 websGetInput函数接收上例 post 头时,会怎么处理。
首先,程序会进入0 分支,接着会进入 socketGets函数,我们在这个函数里去走一圈: ①socketGets函数从 socket 中读取一行,然后返回,如现在读到的是:POST /goform/formTestHTTP/1.1 明显程序将直接走到//输 这 并 回 , 出: 里, 返 1 websGetInput函数的上层调用 函数 websReadEvent 分 ,开始进入状态机 WEBS_BEGIN 进行处理, 析 post 头的第一行 分析成功将状态转到 WEBS_HEADER,这时第二次调用 websGetInput。
②这里 wp 结构除了 state 变量变了,其他都没变,所以 len 还是 0,还是调用 socketGets函数从socket 中读取一行,我们这都假设读成功,先不想不成功的事,现在我们到 WEBS_HEADER 状态机,把读到的数据 放入 wp-gtheader 缓存变量中,这样一直读到 Authorization: Basic YWRtaW46YWRtaW4 这时,wp-gtheader 缓存中存放了除第一行以外的 head,好,到这时,websReadEvent还会再调用一次 websGetInput,我们看这回会.
上一篇:
ASP开发环境
下一篇:
浅析普外科围手术期抗菌药物的应用