当前位置: 首页 > news >正文

在货源网站自己拿样 加盟 做代理 哪个比较好?wordpress会员是主机么

在货源网站自己拿样 加盟 做代理 哪个比较好?,wordpress会员是主机么,成都哪些公司做网站好,美食网站开发方案使用 lwIP 协议栈进行 TCP 裸机编程#xff0c;其本质就是编写协议栈指定的各种回调函数。将你的应用逻辑封装成函数#xff0c;注册到协议栈#xff0c;在适当的时候#xff0c;由协议栈自动调用#xff0c;所以称为回调。 注#xff1a;除非特别说明#xff0c;以下内…使用 lwIP 协议栈进行 TCP 裸机编程其本质就是编写协议栈指定的各种回调函数。将你的应用逻辑封装成函数注册到协议栈在适当的时候由协议栈自动调用所以称为回调。 注除非特别说明以下内容针对 lwIP 2.0.0 及以上版本。 向协议栈注册回调函数有专门的接口如下所示 tcp_err(pcb, errf); //注册 TCP 接到 RST 标志或发生错误回调函数 errf tcp_connect(pcb, ipaddr, port, connected); //注册 TCP 建立连接成功回调函数 connecter tcp_accept(pcb, accept); //注册 TCP 处于 LISTEN 状态时监听到有新的连接接入 tcp_recv(pcb, recv); //注册 TCP 接收到数据回调函数 recv tcp_sent(pcb, sent); //注册 TCP 发送数据成功回调函数 sent tcp_poll(pcb, poll, interval); //注册 TCP 周期性执行回调函数 poll本节讲述 accept 函数。 accept 回调函数 在 TCP 控制块中函数指针 accept 指向用户实现的函数当监听到有新的连接接入时由协议栈调用此函数通知用户接受了新的连接或者通知用户内存不足。 函数指针 accept 的类型为 tcp_accept_fn 该类型定义在 tcp.h 中 /** Function prototype for tcp accept callback functions. Called when a new* connection can be accepted on a listening pcb.** param arg Additional argument to pass to the callback function (see tcp_arg())* param newpcb The new connection pcb* param err An error code if there has been an error accepting.* Only return ERR_ABRT if you have called tcp_abort from within the* callback function!*/ typedef err_t (*tcp_accept_fn)(void *arg, struct tcp_pcb *newpcb, err_t err);协议栈通过宏 TCP_EVENT_ACCEPT(lpcb,pcb,arg,err,ret) 调用 lpcb-accept 指向的函数。宏 TCP_EVENT_ACCEPT 定义在 tcp_priv.h 中 #define TCP_EVENT_ACCEPT(lpcb,pcb,arg,err,ret) \do { \if((lpcb)-accept ! NULL) \(ret) (lpcb)-accept((arg),(pcb),(err)); \else (ret) ERR_ARG; \} while (0)以关键字 TCP_EVENT_ACCEPT 搜索源码可以搜索到 2 处使用 TCP_EVENT_ACCEPT(pcb, NULL, pcb-callback_arg, ERR_MEM, err); TCP_EVENT_ACCEPT(pcb-listener, pcb, pcb-callback_arg, ERR_OK, err);1 由 tcp_listen_input 函数调用 处于 LISTEN 状态的 TCP 控制块 如果收到客户端发送的 SYN 同步标志表示一个客户端在请求建立连接了。 lwIP 会为这个新连接申请一个 TCP_PCB 这一过程在 tcp_listen_input 函数中完成的。然而 TCP_PCB 的个数是有限的如果申请失败则会调用错误码为 ERR_MEM 的 accept 回调函数向用户报告内存分配失败。简化后的代码为 static void tcp_listen_input(struct tcp_pcb_listen *pcb) {// 通过一系列检查 没有错误 npcb tcp_alloc(pcb-prio); // 申请新的 TCP_PCB if (npcb NULL) { // 内存错误处理LWIP_DEBUGF(TCP_DEBUG, (tcp_listen_input: could not allocate PCB\n));TCP_EVENT_ACCEPT(pcb, NULL, pcb-callback_arg, ERR_MEM, err);return;}// 申请成功初始化新申请的pcbnpcb-state SYN_RCVD;// 发送 ACK|SYN 标志return; }这里需要注意申请 TCP_PCB 失败的处理方法lwIP 2.1.x 版本与 lwIP 1.4.1 不同。 再看看 lwIP 1.4.1 的 tcp_listen_input 函数代码经简化 static err_t tcp_listen_input(struct tcp_pcb_listen *pcb) {// 通过一系列检查 没有错误 npcb tcp_alloc(pcb-prio); // 申请新的 TCP_PCB if (npcb NULL) { // 内存错误处理LWIP_DEBUGF(TCP_DEBUG, (tcp_listen_input: could not allocate PCB\n));return ERR_MEM;}// 申请成功初始化新申请的pcb// 发送 ACK|SYN 标志return ERR_OK; }可以看到 lwIP 1.4.1 版本 tcp_listen_input 函数具有返回值如果申请 TCP_PCB 失败则返回 ERR_MEM 错误码。而 lwIP 2.1.x 版本 tcp_listen_input 函数不具有返回值返回类型为 void 其次lwIP 2.1.x 版本处理内存错误是通过调用 accept 回调函数来实现的。宏展开代码简化后如下所示注意第二个参数为 NULL 错误码为 ERR_MEM if(pcb-accept ! NULL)pcb-accept(pcb-callback_arg, NULL, ERR_MEM);这个功能最早是由 Simon Goldschmidt 在 2016-03-23 提交的提交记录为 tcp: call accept-callback with ERR_MEM when allocating a pcb fails onpassive open to inform the application about this errorATTENTION: applications have to handle NULL pcb in accept callback!tcp在被动打开分配 pcb 失败时使用 ERR_MEM 参数调用 accept 回调函数以通知应用程序有关此错误 注意应用程序必须在 accept 回调中处理 pcb 句柄为 NULL 的情况 这就告诉我们一个重要的信息lwIP 2.1.x 版本的 accept 回调函数编写方式与 lwIP 1.4.1 版本不同。lwIP 2.1.x 版本的 accept 回调函数 必须 在 accept 回调中处理 pcb 句柄为 NULL 的情况举个例子。 lwIP 1.4.1 版本的 accept 回调函数可以这么写 /* 客户端连接时, 回调此函数 */ static err_t telnet_accept(void *arg, struct tcp_pcb *pcb, err_t err) {char * p_link_info 已连接到Telnet!\r\n;tcp_recv(pcb,telnet_recv);tcp_err(pcb,NULL);pcb-so_options | SOF_KEEPALIVE; //增加保活机制tcp_write(pcb, p_link_info, strlen(p_link_info), TCP_WRITE_FLAG_COPY);return ERR_OK; }而 lwIP 2.1.x 版本的accept 回调函数需要这么写 /* 客户端连接时, 回调此函数 */ static err_t telnet_accept(void *arg, struct tcp_pcb *pcb, err_t err) {char * p_link_info 已连接到Telnet!\r\n;if(pcb NULL){if(err ERR_MEM)// 处理 TCP 连接个数不足可选return ERR_OK;}tcp_recv(pcb,telnet_recv);tcp_err(pcb,NULL);pcb-so_options | SOF_KEEPALIVE; //增加保活机制tcp_write(pcb, p_link_info, strlen(p_link_info), TCP_WRITE_FLAG_COPY);return ERR_OK; }这里对 pcb 句柄是否为 NULL 做了处理如果检测到 NULLaccpet 回调函数需要提前退出。 2 由 tcp_process 函数调用 处于 SYN_RCVD 状态的 TCP 控制块如果接收的正确的 ACK 标志则调用错误码为 ERR_OK 的 accept 回调函数向用户报告接受了新的连接。简化后的代码为 static err_t tcp_process(struct tcp_pcb *pcb) {switch (pcb-state) {case SYN_RCVD:if (flags TCP_ACK) {/* expected ACK number? */if (TCP_SEQ_BETWEEN(ackno, pcb-lastack 1, pcb-snd_nxt)) {pcb-state ESTABLISHED;/* Call the accept function. */TCP_EVENT_ACCEPT(pcb-listener, pcb, pcb-callback_arg, ERR_OK, err);if (err ! ERR_OK) {/* If the accept function returns with an error, we abort the connection. */if (err ! ERR_ABRT) {tcp_abort(pcb);}return ERR_ABRT;}tcp_receive(pcb);} }break;}return ERR_OK; }读后有收获资助博主养娃 - 千金难买知识但可以买好多奶粉 (〃‘▽’〃)
http://www.pierceye.com/news/240591/

相关文章:

  • 企业商城网站开发互联网行业公司
  • 中国建设人才服务信息网是正规网站wordpress文章分享
  • 渭南网站建设公司电话央美老师做的家具网站
  • 机械网站建设栏目内容怎么欣赏一个网站设计图
  • 帝国cms 网站搬家wordpress 购物 插件下载
  • 怎么做ppt教程网站手机能访问asp网站
  • 电子商务网站建设与管理教材评价织梦网站地图调用全站文章
  • 020网站开发多少钱汕尾建设网站首页
  • 桓台县建设局网站做弹幕网站有哪些
  • 淘宝客导购网站源码iis默认网站属性
  • 做网站用矢量图还是位图安徽省住房和建设厅网站
  • 彭阳网站建设多少钱嘉兴专业的嘉兴专业网站建设项目
  • 网站建设导航分哪几类公司网站大全
  • 网站建设 实训题安能建设总公司网站打不开
  • 莱西网站建设龙岗中心城有学网站建设
  • 重庆技术网站建设宝安做网站哪家好
  • 仿制网站建设写网站建设的软文
  • 0基础网站建设教程wordpress去掉rss订阅
  • 爱网站查询外贸推广具体是做什么
  • 商务网站价格找人做效果图那个网站
  • 上传到网站租一个服务器要多少钱
  • 网站制作服务合同安徽建设工程信息网文件
  • 成都企业网站建设公司正规的跨境电商平台有哪些
  • 中山工程建设信息网站网站监控系统
  • 个人网站想添加支付功能怎么做北京二次感染最新消息
  • 上海注册汽车租赁公司网站模板对seo的影响
  • 上海松江做网站公司wordpress 网站暂停
  • 太仓苏州网站建设网站的规划与建设课程设计
  • 遵义住房城乡建设厅网站电子商务网店毕业设计
  • 惠州市博罗县建设局网站防静电产品东莞网站建设技术支持