Changeset 5577

Show
Ignore:
Timestamp:
06/05/08 14:44:08 (3 months ago)
Author:
morris
Message:

Add 30 second timeout to transfers

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • wired/trunk/wired/transfers.c

    r5540 r5577  
    616616        char                                    buffer[WD_TRANSFER_BUFFER_SIZE]; 
    617617        const char                              *file; 
    618         wi_time_interval_t              interval, speedinterval, statusinterval, accountinterval; 
     618        wi_time_interval_t              timeout, interval, speedinterval, statusinterval, accountinterval; 
    619619        wi_socket_state_t               state; 
    620620        ssize_t                                 bytes, speedbytes, statsbytes; 
     
    659659 
    660660                /* wait to write */ 
     661                timeout = 0.0; 
     662                 
    661663                do { 
    662664                        state = wi_socket_wait_descriptor(sd, 0.1, false, true); 
     665                         
     666                        if(state == WI_SOCKET_TIMEOUT) { 
     667                                timeout += 0.1; 
     668                                 
     669                                if(timeout >= 30.0) { 
     670                                        wi_log_err(WI_STR("Timed out waiting to write download to %@"), 
     671                                                wd_user_ip(transfer->user)); 
     672                                         
     673                                        transfer->state = WD_TRANSFER_STOPPED; 
     674                                } 
     675                        } 
    663676                } while(state == WI_SOCKET_TIMEOUT && transfer->state == WD_TRANSFER_RUNNING); 
    664                  
     677 
    665678                if(transfer->state != WD_TRANSFER_RUNNING) 
    666679                        break; 
     
    781794        char                                    buffer[WD_TRANSFER_BUFFER_SIZE]; 
    782795        const char                              *file; 
    783         wi_time_interval_t              interval, speedinterval, statusinterval, accountinterval; 
     796        wi_time_interval_t              timeout, interval, speedinterval, statusinterval, accountinterval; 
    784797        wi_socket_state_t               state; 
    785798        ssize_t                                 result, speedbytes, statsbytes; 
     
    809822        while(transfer->state == WD_TRANSFER_RUNNING && transfer->transferred < transfer->size) { 
    810823                /* wait to read */ 
     824                timeout = 0.0; 
     825                 
    811826                do { 
    812827                        state = wi_socket_wait_descriptor(sd, 0.1, true, false); 
     828                         
     829                        if(state == WI_SOCKET_TIMEOUT) { 
     830                                timeout += 0.1; 
     831                                 
     832                                if(timeout >= 30.0) { 
     833                                        wi_log_err(WI_STR("Timed out waiting to read upload from %@"), 
     834                                                wd_user_ip(transfer->user)); 
     835                                         
     836                                        transfer->state = WD_TRANSFER_STOPPED; 
     837                                } 
     838                        } 
    813839                } while(state == WI_SOCKET_TIMEOUT && transfer->state == WD_TRANSFER_RUNNING); 
    814840