UIP UDP的补丁

2 篇文章 0 订阅
2 篇文章 0 订阅

该补丁是从网上拷贝来的,使得UIP能够以UDP服务器端工作。



Index: uip.c
===================================================================
--- uip.c	(版本 6)
+++ uip.c	(工作副本)
@@ -682,6 +682,9 @@
 uip_process(u8_t flag)
 {
   register struct uip_conn *uip_connr = uip_conn;
+#if UIP_UDP
+  u16_t udp_listen = 0;
+#endif /* UIP_UDP */
 
 #if UIP_UDP
   if(flag == UIP_UDP_SEND_CONN) {
@@ -1116,6 +1119,14 @@
        (uip_ipaddr_cmp(uip_udp_conn->ripaddr, all_zeroes_addr) ||
 	uip_ipaddr_cmp(uip_udp_conn->ripaddr, all_ones_addr) ||
 	uip_ipaddr_cmp(BUF->srcipaddr, uip_udp_conn->ripaddr))) {
+      /**< if the remote port is 0, is a listen, copy remote address and port */
+      if(uip_udp_conn->rport==0)
+      {
+          udp_listen = 1;
+          /**< set new client info */
+          uip_udp_conn->rport=UDPBUF->srcport;
+          memcpy(uip_udp_conn->ripaddr, UDPBUF->srcipaddr, sizeof(uip_ipaddr_t ) );
+      }
       goto udp_found;
     }
   }
@@ -1155,7 +1166,13 @@
 
   uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr);
   uip_ipaddr_copy(BUF->destipaddr, uip_udp_conn->ripaddr);
-   
+
+  /**< restore listen */
+  if( udp_listen )
+  {
+      uip_udp_conn->rport = 0;
+  }
+
   uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_IPTCPH_LEN];
 
 #if UIP_UDP_CHECKSUMS


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值