DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦c1a1c7ccb⟧ Ada Source

    Length: 4096 (0x1000)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, procedure Transport_Server_Proc, seg_0009dc

Derivation

└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
    └─ ⟦5a81ac88f⟧ »Space Info Vol 1« 
        └─⟦this⟧ 

E3 Source Code



procedure Transport_Server_Proc (Service : in out Service_Type;  
                                 Connection : in out Transport.Connection_Id;  
                                 Network : Transport_Defs.Network_Name;  
                                 Local_Socket : Transport_Defs.Socket_Id) is

    Status : Transport_Defs.Status_Code;  
    Fatal_Error : exception;

    Min_Backoff : constant Duration := 0.1;  
    Max_Backoff : constant Duration := 5 * 60.0;  
    Backoff : Duration := Min_Backoff;

    procedure Do_Backoff (Backoff : in out Duration) is  
    begin  
        delay Backoff;  
        Backoff := 2 * Backoff;  
        if Backoff > Max_Backoff then  
            Backoff := Max_Backoff;  
        end if;  
    end Do_Backoff;

    function Status_Ok return Boolean is  
    begin  
        case Status is  
            when Transport_Defs.Ok =>  
                return True;  
            when Transport_Defs.Too_Many_Clients |  
                 Transport_Defs.No_Hardware |  
                 Transport_Defs.No_Such_Network |  
                 Transport_Defs.Socket_In_Use |  
                 Transport_Defs.Access_Denied =>  
                raise Fatal_Error;  
            when others =>  
                Do_Backoff (Backoff);  
                return False;  
        end case;  
    end Status_Ok;

begin  
    loop  
        Transport.Open (Connection, Status, Network, Local_Socket);  
        if Status_Ok then  
            Transport.Connect (Connection, Status);  
            if Status_Ok then  
                Serve (Service, Connection);  
                Backoff := Min_Backoff;  
            end if;  
            Transport.Disconnect (Connection);  
        end if;  
        Transport.Close (Connection);  
    end loop;  
exception  
    when Fatal_Error =>  
        Transport.Close (Connection);  
    when others =>  
        Transport.Close (Connection);  
        raise;  
end Transport_Server_Proc;  

E3 Meta Data

    nblk1=3
    nid=0
    hdr6=6
        [0x00] rec0=1d rec1=00 rec2=01 rec3=004
        [0x01] rec0=1d rec1=00 rec2=02 rec3=00c
        [0x02] rec0=02 rec1=00 rec2=03 rec3=000
    tail 0x201007cea7bac64ca0b61 0x42a00088462060003