| 
 Thanks for the great API I have posted my version of MPUT using the FTPAPI below to
give something back to the group and to ask for help. The purpose is to MPUT the contents of a directory and
optionally move the file to a different directory or delete it but only if the
PUT was successful. The program below also uses Toms BASICS1 and IFS  service
programs for directory and file manipulation. The program opens the FTP session, sets Binary *on and
Passive *off It then reads a directory entry and PUTs the file. Reads the next directory  entry and PUTs until the all
entries have been read. Now the problem.  I am transferring over 1000 files for
about 10 meg of data. The program would hang after transferring 300 (not always
the same number) or more files successfully so I added the 15 second socket
timeout. The program regains control but does not recover after the
quit and connect,  It cannot reconnect so it ends. This transfer is AS/400 to AS/400 internet speed probably
128k or less.  The disconnects seem to happen 5, 10, or 15 minutes after
initial connection. My theory is that some ISP along the way is not seeing
traffic on port 80 thinks it is inactive and closes the connection. Weather my theory is correct or not how can I get the
program to recognize the connection is lost establish a new one and just
continue on??? I have included the last portion of the job log so you can
see what is happening in the current program. Sr programmer analyst Solutions, Inc. Spencer Iowa 250 File transfer completed
successfully.                   
 > TYPE
I                                                    
 200 Representation type is binary
IMAGE.                    
 > PORT
10,0,0,1,24,202                                      
 200 PORT subcommand request
successful.                     
 > STOR
/lcm/CTY74_20050211_112225392_1764.xml               
 DSPLY  Timed out while waiting for data from
socket            **********
connection times out >
QUIT                                                      
 150 Sending file to
/lcm/CTY74_20050211_112225392_1764.xml    220-QTCP at WEB4002.xxxxxxxx.COM.                       
 220 Connection will close if idle more than 5
minutes.        > USER webxxxxx                                            
 DSPLY  Timed out while waiting for data from
socket      *===============================================================*   
 H
DEBUG                                                              
 H OPTION(*SRCSTMT :
*NODEBUGIO)                                      
 H DECEDIT('0,')
DATEDIT(*DMY.)                                         H DATFMT(*ISO )  TIMFMT(*ISO
)                                       
 H
DFTACTGRP(*NO)                                                     
 H
ACTGRP(*NEW)                                                       
 H EXPROPTS(*RESDECPOS)                                               
 H
EXTBININT(*YES)                                                    
 H
BNDDIR('QC2LE':'XMLRPG':'FTPAPI')                                  
  *===============================================================*   
  *                                                                   
  *
------------------------------------                              
  *  XML Wrapper Service
Program                                         *
------------------------------------                              
  /COPY
QXMLRPG,PXMLRPG                                               
  *
------------------------------------                              
  *  Basics                                                              *
------------------------------------                              
  /COPY
QBASICS1,PBASICS1                                                    
  *
------------------------------------           
                            *  FTPAPI Service
Program                                                  
  *
------------------------------------                                     
  /COPY
FTPAPISRC,FTPAPI_H                                               
      /COPY
QIFS,CLIB                                                            
  /COPY
QIFS,PIFS                                                            
 D
Msg            
S            
52A                                         
 D
sess            S            
10I
0                                       
  *                                                                          
  *
------------------------------------                                     
  *  Internal
prototypes               
                                        *
------------------------------------                                     
  *                                                                          
 D
PGM_ENTRY_POINT...                                        
                 D                
PR                 
extpgm('FTPMPUTR')                    
 D  
p_conn                     
30A  
const                                 
 D  
p_user                     
20A  
const                                 
 D   p_pass                     
20A  
const                                 
 D  
p_from                    
120A  
const                       
 D  
p_to                      
120A  
const                       
 D  
p_move                    
120A  
const                       
                                                                   
 D  
w_to         
s           
256A                               
 D  
w_from       
s           
256A                
                D  
w_move       
s           
256A                               
 D 
i_dirp        
s              
*                               
 D 
rc            
S             10I
0                  
inz         D  Error_count   
S             
5P 0                             
  *                                                                
  *===============================================================*
  * 
Program-Entry-Point                                           
  *===============================================================*
 D
PGM_ENTRY_POINT...                                              
 D                
PI                                              
 D  
p_conn                     
30A  
const                       
 D   p_user                     
20A  
const                       
 D  
p_pass                     
20A  
const                       
 D  
p_from                    
120A  
const                     
 D  
p_to                      
120A  
const              
        D  
p_move                    
120A  
const                     
  * - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - -   /FREE                                                          
                                                  
                  // connect to FTP server.  If an error
occurs,                
   // display an error message and
exit.                         
          
sess =
ftp_conn(%trim(p_conn):                        
                 
%trim(p_user):                                                   
%trim(p_pass):                                 
                 
21:                                            
                 
15);                                           
       if sess <
0;                                              
         Msg =
ftp_error;                                        
         dsply
Msg;                                              
         *inlr =
*on;                                     
               
return;                                                 
      
endif;                                                    
                                                                     
       rc =
ftp_passiv('0');                  
                              callp
ftp_binary(*on);                                        
                                                                     
   // Read directory  Process all
responses.                         
    i_dirp = opendir(%trim(p_from));                                 
    if   f_errno <>
0;                                               
       msg =
f_newMsg('CPF9898':
f_strerror(f_errno));               
   
endif;                                                          
     p_dirent =
readdir(i_dirp);                                      
    dow  p_dirent <>
*null;                                          
    if   f_errno <>
0;                                               
       msg =
f_newMsg('CPF9898': f_strerror(f_errno));               
   
endif;                                                           
      if (dirent_t.d_namelen)
>
3;                                   
                                                                     
     w_to = %trim(p_to) + '/'
+                                      
                 
%subst((dirent_t.d_name):1:(dirent_t.d_namelen));        w_from = %trim(p_from) + '/'
+                                  
                 
%subst((dirent_t.d_name):1:(dirent_t.d_namelen));                                                                        
     if ftp_put(sess: %trim(w_to) :
%trim(w_from) ) <
0;             
        Msg =
ftp_error;                                             
        dsply
Msg;                                                   
                                                                     
   // Error Recovery  Disconnect and
Reconnect                       
   // If unsuccessfull
terminate              
                                                                                            
     callp
ftp_quit(sess);                                           
          
sess =
ftp_conn(%trim(p_conn):                            
                 
%trim(p_user):                                     
                 
%trim(p_pass):                                     
                 
21:                                                
                 
15);                                              
        if sess <
0;                                                  
         Msg =
ftp_error;                                            
         dsply
Msg;                                                  
         *inlr =
*on;                       
                                 
return;                                          
      
endif;                                             
                                                          
       rc =
ftp_passiv('0');                         
            callp
ftp_binary(*on);                             
                                                          
      
iter;                                              
                                                          
     else;                                                        if p_move <>
*blanks;                              
         if p_move
=
'*DELETE';                           
          
rc =
unlink(%trim(w_from));                    
        
else;                                            
                                                          
        rc =
f_moveIfsFile(%trim(w_from): %trim(p_move));                                                            
        
endif;                                                  
endif;                                             
    
endif;                                               
    
endif;                    
    p_dirent = readdir(i_dirp);    
enddo;                     
                                     callp
ftp_quit(sess);                                     
     *INLR =
*ON;              
                               
  /END-FREE                    
        |