PreviousUpNext

15.4.1182  src/lib/std/src/socket/threadkit-pre-socket.pkg

## threadkit-pre-socket.pkg

# Compiled by:
#     src/lib/std/standard.lib


# Provide some utility operations for threadkit sockets.

stipulate
    package io  =  threadkit_io_manager;                        # threadkit_io_manager  is from   src/lib/src/lib/thread-kit/src/core-thread-kit/threadkit-io-manager.pkg
    package md  = maildrop;                                     # maildrop              is from   src/lib/src/lib/thread-kit/src/core-thread-kit/maildrop.pkg
#   package mop =  mailop;                                      # mailop                is from   src/lib/src/lib/thread-kit/src/core-thread-kit/mailop.pkg
    package skt =  socket;                                      # socket                is from   src/lib/std/socket.pkg
herein

    package threadkit_pre_socket
    : (weak)
        api {

            Socket_State
              = UNCONNECTED                                     # Initial state.
              | CONNECTING                                      # Waiting for a connect to complete.
              #
              | CONNECTED                                       # Connected. 
              | ACCEPTING                                       # Waiting for an accept to complete. 
              #
              | WAITING_ON_IO                                   # Waiting on an input and/or output operation. 
              | CLOSED
              ;

            Threadkit_Socket (X, Y)
                =
                THREADKIT_SOCKET
                  {
                    state:   maildrop::Maildrop( Socket_State ),
                    #
                    socket:  skt::Socket( X, Y )
                  };

             make_socket:  skt::Socket( X, Y ) -> Threadkit_Socket (X, Y);

             in_mailop:   Threadkit_Socket( X, Y ) -> threadkit::Mailop( Void );
             out_mailop:  Threadkit_Socket( X, Y ) -> threadkit::Mailop( Void );

        }
    {
        include threadkit;                                      # threadkit             is from   src/lib/src/lib/thread-kit/src/core-thread-kit/threadkit.pkg


        Socket_State
          = UNCONNECTED         # Initial state.
          | CONNECTING          # Waiting for a connect to complete.
          #     
          | CONNECTED           # Connected.
          | ACCEPTING           # Waiting for an accept to complete. 
          #
          | WAITING_ON_IO               # Waiting on an input and/or output operation.
          | CLOSED
          ;

        Threadkit_Socket (X, Y)
            =
            THREADKIT_SOCKET
              {
                state:    Maildrop( Socket_State ),
                #
                socket:   skt::Socket( X, Y )
              };

        # Given a Mythryl socket, return a threadkit socket 
        #
        fun make_socket s
            =
            THREADKIT_SOCKET {
                state  => make_full_maildrop  UNCONNECTED,
                socket => s
            };

        stipulate
            include threadkit;                                                  # threadkit             is from   src/lib/src/lib/thread-kit/src/core-thread-kit/threadkit.pkg

            fun socket_to_wait_request  { socket, readable, writable, oobdable }
                =
                { io_descriptor =>  skt::io_descriptor  socket,
                  readable,
                  writable,
                  oobdable
                };

        herein

            fun in_mailop  (THREADKIT_SOCKET { socket, ... } )
                =
                io::io_mailop (socket_to_wait_request { socket, readable => TRUE,  writable => FALSE, oobdable => FALSE } )
                    ==>
                    ignore;


            fun out_mailop (THREADKIT_SOCKET { socket, ... } )
                =
                io::io_mailop (socket_to_wait_request { socket, readable => FALSE, writable => TRUE,  oobdable => TRUE  } )
                    ==>
                    ignore;

        end;
    };
end;

## COPYRIGHT (c) 1996 AT&T Research.
## Subsequent changes by Jeff Prothero Copyright (c) 2010-2012,
## released under Gnu Public Licence version 3.


Comments and suggestions to: bugs@mythryl.org

PreviousUpNext