uip1.0主动断开有关问题

uip1.0主动断开问题
现在是使用uip1.0协议栈中的uip_close()主动断开客户端连接没反应,也就是客户端收不到断开消息,我的断开处理是在
uip_len = enc28j60_packet_receive(uip_buf, UIP_BUFSIZE );
if (uip_len > 0)
{  
  if(DATABUF->type == htons(UIP_ETHTYPE_IP)) 
  {  
  uip_arp_ipin();
  uip_input();
  if(uip_len > 0)
  {  
  uip_arp_out();
  enc28j60_packet_send(uip_buf, uip_len);  
  }  
  } 
  else if(DATABUF->type == htons(UIP_ETHTYPE_ARP))
  {  
  uip_arp_arpin();
  if(uip_len > 0) 
  enc28j60_packet_send(uip_buf, uip_len);
  }

else
{
//在这里处理断开连接,加了心跳的断开处理,但是断开没任何反应客户端仍然可以发送数据及UIP可以收取数据,希望大家能帮下忙解决,在这先谢谢大家。  
}

------解决方案--------------------
接收到数据了 只是数据不正确 看一下配置

C/C++ code
/********************************************* 
 * vim:sw=8:ts=8:si:et 
 * To use the above modeline in vim you must have "set modeline" in your .vimrc 
 * Author: Guido Socher 
 * Copyright: GPL V2 
 * 
 * Ethernet remote device and sensor 
 * 
 * Title: Microchip ENC28J60 Ethernet Interface Driver 
 * Chip type           : ATMEGA88 with ENC28J60 
 *********************************************/ 
#include <avr/io.h> 
#include "ip_arp_udp.h" 
#include "enc28j60.h" 
#include "timeout.h" 
#include "avr_compat.h" 
#include "net.h" 
#include "stdlib.h" 

// please modify the following two lines. mac and ip have to be unique 
// in your local area network. You can not have the same numbers in 
// two devices: 
static uint8_t mymac[6] = {0x13,0x33,0x37,0x71,0x77,0x20}; 
static uint8_t myip[4] = {192,168,1,10}; 
static uint16_t myport =1200; // listen port for udp 
// how did I get the mac addr? Translate the first 3 numbers into ascii is: TUX 

#define BUTTON_PORT PORTD 
#define BUTTON_PIN PIND 
#define BUTTON_BIT PD2 

#define BUFFER_SIZE 250 
static uint8_t buf[BUFFER_SIZE+1]; 

int main(void){ 

        
        uint16_t plen; 
        uint8_t i=0; 
        uint8_t payloadlen=0; 
        char message[100]={'/','e','l','l','o',0,0,0,',',0,0}; 
        
        // set the clock speed to 8MHz 
        // set the clock prescaler. First write CLKPCE to enable setting of clock the 
        // next four instructions. 
        CLKPR=(1<<CLKPCE); 
        CLKPR=0; // 8 MHZ 
        
        /* enable PB0, reset as output */ 
        DDRB|= (1<<DDB0); 

        /* set output to gnd, reset the ethernet chip */ 
        PORTB &= ~(1<<PB0); 
        delay_ms(20); 
        /* set output to Vcc, reset inactive */ 
        PORTB|= (1<<PB0); 
        delay_ms(100); 
        
        // LED 
        /* enable PB1, LED as output */ 
        DDRB|= (1<<DDB1); 

        /* set output to Vcc, LED off */ 
        PORTB|= (1<<PB1); 
        
        //Enable pullup on pin D 
        PORTD|= (1<<PD0); 

        /*initialize enc28j60*/ 
        enc28j60Init(mymac); 
        delay_ms(20); 
        
        /* Magjack leds configuration, see enc28j60 datasheet, page 11 */ 
        // LEDB=yellow LEDA=green 
        // 
        // 0x476 is PHLCON LEDA=links status, LEDB=receive/transmit 
        // enc28j60PhyWrite(PHLCON,0b0000 0100 0111 01 10); 
        enc28j60PhyWrite(PHLCON,0x476); 
        delay_ms(20); 
        
        /* set output to GND, red LED on */ 
        PORTB &= ~(1<<PB1); 
        i=1; 
        
        //init the ethernet/ip layer: 
        init_ip_arp_udp(mymac,myip); 

        while(1){ 
                // get the next new packet: 
                plen = enc28j60PacketReceive(BUFFER_SIZE, buf); 

                /*plen will be unequal to zero if there is a valid 
                 * packet (without crc error) */ 
                if(plen==0){ 
                        continue; 
                } 
                // arp is broadcast if unknown but a host may also 
                // verify the mac address by sending it to 
                // a unicast address. 
                if(eth_type_is_arp_and_my_ip(buf,plen)){ 
                        make_arp_answer_from_request(buf,plen); 
                        continue; 
                } 
                // check if ip packets (icmp or udp) are for us: 
                if(eth_type_is_ip_and_my_ip(buf,plen)==0){ 
                        continue; 
                } 
                
                if (i){ 
                        /* set output to Vcc, LED off */ 
                        PORTB|= (1<<PB1); 
                        i=0; 
                }else{ 
                        /* set output to GND, LED on */ 
                        PORTB &= ~(1<<PB1); 
                        i=1; 
                } 

                        
                if(buf[IP_PROTO_P]==IP_PROTO_ICMP_V && buf[ICMP_TYPE_P]==ICMP_TYPE_ECHOREQUEST_V){ 
                        // a ping packet, let's send pong 
                        make_echo_reply_from_request(buf,plen); 
                        continue; 
                } 
                if (buf[IP_PROTO_P]==IP_PROTO_UDP_V){ 
                        payloadlen=buf[UDP_LEN_L_P]-UDP_HEADER_LEN; 
                        if (buf[UDP_DATA_P]=='t' && payloadlen==12){ 
                              //itoa(buf,message,10); 
                              while(1){ 
                                 if (bit_is_clear(PIND,PD0)){
                                      make_udp_reply_from_request(buf,message,16,myport); 
                                      delay_ms(50); 
                                      while(bit_is_clear(PIND,PD0)) 
                                         { 
                                         } 
                                      delay_ms(50); 
                                      } 
                                } 
                        } 
                } 
        } 
        return (0); 
}