该补丁是从网上拷贝来的,使得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