DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400 Tapes

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 Tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download
Index: ┃ B T

⟦856ea2ac5⟧ TextFile

    Length: 3049 (0xbe9)
    Types: TextFile
    Names: »B«

Derivation

└─⟦149519bd4⟧ Bits:30000546 8mm tape, Rational 1000, !projects 93-07-13
    └─ ⟦124ff5788⟧ »DATA« 
        └─⟦this⟧ 
└─⟦a7d1ea751⟧ Bits:30000550 8mm tape, Rational 1000, !users!projects 94_04_11
    └─ ⟦129cab021⟧ »DATA« 
        └─⟦this⟧ 
└─⟦f64eaa120⟧ Bits:30000752 8mm tape, Rational 1000, !projects 93 02 16
    └─ ⟦6f12a12be⟧ »DATA« 
        └─⟦this⟧ 
└─⟦2f6cfab89⟧ Bits:30000547 8mm tape, Rational 1000, !projects 94-01-04
    └─ ⟦d65440be7⟧ »DATA« 
        └─⟦this⟧ 

TextFile

SEPARATE (Transport)
PROCEDURE Open_Server (Connection   : OUT Transport.Connection_Id;
                       Status       : OUT Transport_Defs.Status_Code;
                       Network      : IN  Transport_Defs.Network_Name;
                       Local_Socket : IN  Transport_Defs.Socket_Id) IS

   Laddr_In : Socket_System_Interface.Sockaddr_In :=
      (Sin_Family => Socket_System_Interface.Af_Inet,
       Sin_Port   => Unix_Base_Types.Ushort
                        (Byte_String_To_Integer
                            (Byte_Defs.Byte_String  
                                (Transport_Defs.Normalize (Local_Socket)))),  
       Sin_Addr   => Socket_System_Interface.Inaddr_Any,
       Sin_Zero   => (OTHERS => Ascii.Nul));

   Laddrlen : Unix_Base_Types.Int := Laddr_In'Size / System.Storage_Unit;

   Laddr_In_Ptr : Socket_System_Interface.Sockaddr_In_Ptr :=
      To_Sockaddr_In_Ptr (Laddr_In'Address);

   New_Connect        : Transport.Connection_Id;
   Network_Socket     : Unix_Base_Types.Int;
   System_Call_Result : Unix_Base_Types.Int;
   Errno              : Unix_Base_Types.Int;

BEGIN

   Connection := Null_Connection_Id;
   Status     := Transport_Defs.Ok;

   Start_System_Call;

   Network_Socket :=
      Socket_System_Interface.Socket
         (Af          => Unix_Base_Types.Int (Socket_System_Interface.Af_Inet),
          Socket_Type => Socket_System_Interface.Sock_Stream,
          Protocol    => 0);

   Errno := Finish_System_Call;

   IF (Network_Socket < 0) THEN
      Status := Convert_Errno (Errno => Errno);
      RETURN;
   END IF;

   Start_System_Call;

   System_Call_Result :=
      Socket_System_Interface.Bind
         (S => Network_Socket, Addr => Laddr_In_Ptr, Addrlen => Laddrlen);

   Errno := Finish_System_Call;

   IF (System_Call_Result < 0) THEN
      Status := Convert_Errno (Errno => Errno);
      Start_System_Call;
      System_Call_Result := System_Interface.File_Io.Close (Network_Socket);
      Errno              := Finish_System_Call;
      RETURN;
   END IF;


   Start_System_Call;

   System_Call_Result :=  
      Socket_System_Interface.Listen (S => Network_Socket, Backlog => 5);

   Errno := Finish_System_Call;

   IF (System_Call_Result < 0) THEN
      Status := Convert_Errno (Errno => Errno);
      Start_System_Call;
      System_Call_Result := System_Interface.File_Io.Close (Network_Socket);
      Errno              := Finish_System_Call;
      RETURN;
   END IF;

   -- To reach this point, the Server has been successfully Open, Bound and
   -- is Listening.  We need to establish a connection_id with the correct
   -- information.

   New_Connect                         := Get;
   New_Connect.Kind                    := Server;
   New_Connect.Socket_Status           := Open;
   New_Connect.Local_Socket_Descriptor := Network_Socket;
   New_Connect.Tcp_Socket_Descriptor   := Unix_Error;
   New_Connect.Local_Sockaddr_In       := Laddr_In;
   -- Tcp_Socket_Descriptor will be set during _accept (Transport.Connect)

   Connection := New_Connect;

END Open_Server;