HELP:usb host to host bridge and usb DDK

I 'm writing a usb class driver for this device:usb host to host bridge, what is used to communicate PC-to-PC by usb cable. my program is following and i have some problems. Every time the returned value of usbd_select_interface is EIO, i don’t know why this is.Help me, please!
usbd_urb_status return EIO, too. WHY?

void insertion ( )
{
int i;
struct usbd_desc_node *node=NULL;
usbd_descriptors_t *desc=NULL;
usbd_device_descriptor_t *ddesc=NULL;
usbd_interface_descriptor_t *idesc=NULL;
usbd_configuration_descriptor_t *cdesc=NULL;
usbd_endpoint_descriptor_t *edesc=NULL;

struct        usbd_pipe          *pipe=NULL;
struct        usbd_urb           *urb=NULL;
struct        usbd_urb           *link=NULL;

char          *usbd=NULL;
_uint32        status=0, len=0;

int  bConfigurationValue = 1;
int  bInterfaceNumber = 0;
int  bAlternateSetting = 0;
	
printf("insertion  beginning\n");

instance.path = 0;
instance.devno = 1;
instance.generation;
            instance.ident = interest;
            instance.config = 1;
            instance.iface = 0;
            instance.alternate = 0;

            error = usbd_attach( connection, &instance, 0, &device );
printf("usbd_attach  error=%d\n",error );

ddesc = usbd_device_descriptor(device,&node );
if (ddesc == NULL )
{
	perror("usbd_device_descriptor");
}    

cdesc = usbd_configuration_descriptor(device, bConfigurationValue, &node );
if (ddesc == NULL )
{
	perror("usbd_configuration_descriptor");
}

idesc = usbd_interface_descriptor(device,bConfigurationValue,bInterfaceNumber,bAlternateSetting,&node);
if (idesc == NULL )
{
	perror("usbd_interface_descriptor");
}

if ( usbd_select_config(device, bConfigurationValue ) )
{
	perror("usbd_select_config");
}
sleep(1);   

if (usbd_select_interface(device, bInterfaceNumber, bAlternateSetting ) )
{
	perror("usbd_select_interface");
}
	
desc = usbd_parse_descriptors(device, node, USB_DESC_ENDPOINT,0, &node);
if (desc==NULL )
{
	perror("usbd_parse_descriptors");
}

if (  usbd_open_pipe( device, desc, &pipe ))
{
	perror("usbd_open_pipe");
}

i = usbd_pipe_endpoint( pipe );
printf("usbd_pipe_endpoint i=%d\n",i);

urb = usbd_alloc_urb(link );
if (urb==NULL )
{
	perror("usbd_alloc_urb");
}

usbd = usbd_alloc( 64 );
if (usbd==NULL )
{
	perror("usbd_alloc");
}

memset(usbd,0,64);	

if ( usbd_setup_bulk(urb, URB_DIR_OUT, usbd, 64 ))
{
	perror("usbd_setup_bulk");
}
memset(usbd,2,64);                

if ( usbd_io( urb, pipe, write_complete, NULL,  USBD_TIME_DEFAULT ))
{
	perror("usbd_io");
}

pthread_sleepon_lock();
i = usbd_urb_status( urb, &status, &len );
printf("i=%d, status=%x, len=%d\n",i,status,len);

while (i )
{
	pthread_sleepon_wait(urb);
	i = usbd_urb_status( urb, &status, &len );
	printf("i=%d, status=%x, len=%d\n",i,status,len);
}


pthread_sleepon_unlock();

usbd_free_urb(urb);
usbd_free(usbd);    
usbd_close_pipe( pipe );

printf("insertion END !!\n");

}