[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Aug 2003
    Beiträge
    163

    Socket Fehler 3430 bei Connect

    Guten Tag,

    beim Versuch eine Socket Verbindung aufzubauen bekomme ich immer den Fehlercode 3430 ( Operation in progress) zurück. Ein Auszug aus dem Code ist hier:

    Code:
    D p_sockaddr      S               *                          
                                                                 
    D sockaddr        DS                  based(p_sockaddr)      
    D   sa_family                    5I 0                        
    D   sa_data                     14A                          
                                                                 
    D sockaddr_in     DS                  based(p_sockaddr)      
    D   sin_family                   5I 0                        
    D   sin_port                     5U 0                        
    D   sin_addr                    10U 0                        
    D   sin_zero                     8A                          
                                            
             ...
    
        flags = fcntl(sock: F_GETFL);      
        flags = %bitor(flags: O_NONBLOCK); 
        fcntl(sock: F_SETFL: flags);                   
    
            ...
    
        addrlen = %size(sockaddr);                     
        p_connto = %alloc(addrlen);                    
        p_sockaddr = p_connto;                         
                                                       
        sin_family = AF_INET;                          
        sin_addr = IP;                                 
        sin_port = Port;                               
        sin_zero = *ALLx'00';                          
        RetCode = connect(sock: p_sockaddr : addrlen); 
        if RetCode  < 0;                               
           errnoPtr = getErrnoPtr();                   
           dsply ('Open = ' + %char(errno));           
           Retcode = sclose(sock);                     
           if RetCode  < 0;                            
              errnoPtr = getErrnoPtr();                
              dsply ('Open = ' + %char(errno));        
           endif;                                      
           return;                                     
        endif;
    Wenn ich das "NONBLOCK" nicht setze, bleibt das Programm beim Connect stehen, bis ich es abbreche.

    Hat jemand eine Idee, woran das liegt?

    Vielen Dank im Voraus

    Hubert

    P.S. Ich habe die Vorlage aus der Anleitung von Scott Klement

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    3430 ist kein Fehler:

    EINPROGRESS
    3430 - Operation in progress


    Dein Fehler, dass keine Verbindung zustande kommt, muss also ein anderer sein.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    May 2007
    Beiträge
    295
    Schönen Nachmittag.

    Ich bin auch gerade dabei für mich ein Socketprogramm zu basteln welches über IMAP Mails ausliest. Dazu verwende ich das SOCKET_H-File von Scott Klement und nicht das komplette Socket-API.

    https://github.com/PantalonOrange/Ma...IMAPVWRG.rpgle

    Prozedur
    Code:
    connectToHost
    Schau mal rein und kopier dir die benötigten Stellen raus.
    Funktioniert bei mir wunderbar... :-)

    greets
    Greets
    Christian
    Anwendungsentwickler und ein bissal Systemoperator
    https://github.com/prsbrc
    LinkedIn

  4. #4
    Registriert seit
    Aug 2003
    Beiträge
    163
    Das Problem besteht darin, dass mit den Zeilen

    Code:
        flags = fcntl(sock: F_GETFL);      
        flags = %bitor(flags: O_NONBLOCK); 
        fcntl(sock: F_SETFL: flags);
    der Socket nicht geblockt wird. Wenn ich diese Zeilen weglasse und die Waage aus irgendeinem Grund nicht antwortet, bleibt das Programm ohne Fehlermeldung stehen.
    Der Versuch mit
    Code:
    d TimeOut         DS                           
    d  Sekunden                     10i 0 inz(5)   
    d  usec                         10i 0 inz(0)   
    
    RetCode = setsockopt(sock             
                          :SOL_SOCKET     
                          :SO_RCVTIMEO    
                          :%addr(Timeout) 
                          : %size(Timeout)
                        );
    ein Timeout zu setzen, bringt leider auch keinen Erfolg. Habe ich vielleicht beim Setzen des Timeout einen Gedankenfehler?

  5. #5
    Registriert seit
    May 2007
    Beiträge
    295
    Hallo.

    Ich habe jetzt etwas geforscht und scheinbar wird der Timeout mit dem setSockOpt API nicht unterstützt. Dazu muss man das Unix98 API qso_setsockopt98 verwenden.
    http://blog.rpgnextgen.com/blog/2017...t-take-a-break

    Greets
    Greets
    Christian
    Anwendungsentwickler und ein bissal Systemoperator
    https://github.com/prsbrc
    LinkedIn

  6. #6
    Registriert seit
    Aug 2003
    Beiträge
    163
    Das hatte ich auch gefunden. In der Prozedurdefinition hatte ich das bereits angegeben.

    Code:
    D setsockopt      PR            10I 0 ExtProc('qso_setsockopt98')
    D  socket_desc                  10I 0 Value                      
    D  level                        10I 0 Value                      
    D  option_name                  10I 0 Value                      
    D  option_value                   *   Value                      
    D  option_length                10I 0 Value
    Das hat leider auch Nichts gebracht.

  7. #7
    Registriert seit
    May 2007
    Beiträge
    295
    Guten Morgen.
    Dann weiß ich leider auch nicht mehr weiter. Versuchs mal im englischsprachigen Forum https://www.code400.com/forum/ denn dort ist Scott Klement auch aktiv unterwegs. Vielleicht kann dir dort besser geholfen werden.

    greets
    Greets
    Christian
    Anwendungsentwickler und ein bissal Systemoperator
    https://github.com/prsbrc
    LinkedIn

Similar Threads

  1. Lizenz / DB2 Connect
    By marcy88 in forum IBM i Hauptforum
    Antworten: 9
    Letzter Beitrag: 12-06-19, 14:27
  2. SQL-Server-Connect mit Ardgate
    By WeRi in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 03-04-19, 17:18
  3. Connect to iSeries from Linux
    By ClintBarton in forum NEWSboard Linux
    Antworten: 1
    Letzter Beitrag: 16-06-18, 14:27
  4. UDP Socket timeout
    By max40 in forum NEWSboard Programmierung
    Antworten: 0
    Letzter Beitrag: 27-01-16, 12:58
  5. Problem bei ILE COBOL mit sql connect to
    By rebe in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 07-09-01, 14:55

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •