PreviousUpNext

15.4.1185  src/lib/std/src/socket/unix-domain-socket.pkg

## unix-domain-socket.pkg

# Compiled by:
#     src/lib/std/src/standard-core.sublib

stipulate
    package sg =  socket_guts;                                  # socket_guts                           is from   src/lib/std/src/socket/socket-guts.pkg
    package gs =  plain_socket;                         # plain_socket                  is from   src/lib/std/src/socket/plain-socket.pkg
    package ps =  pre_socket;                                   # pre_socket                            is from   src/lib/std/src/socket/pre-socket.pkg
    package ci =  mythryl_callable_c_library_interface;         # mythryl_callable_c_library_interface  is from   src/lib/std/src/unsafe/mythryl-callable-c-library-interface.pkg
herein

    package   unix_domain_socket
    : (weak)  Unix_Domain_Socket                                # Unix_Domain_Socket                    is from   src/lib/std/src/socket/unix-domain-socket.api
    {
        fun socket_fn  fun_name
            =
            ci::find_c_function { lib_name => "socket", fun_name };

        Unix = UNIX;

        Socket(X) = ps::Socket( Unix, X ); 

        Stream_Socket(X) = Socket( sg::Stream(X) );
        Datagram_Socket  = Socket( sg::Datagram );

        Unix_Domain_Socket_Address = ps::Socket_Address( Unix );

        unix_address_family
            =
            null_or::the  (sg::af::from_string  "UNIX");

        # We should probably do some error checking
        # on the length of the string.                   XXX BUGGO FIXME
        #
        stipulate
            my string_to_unix_domain_socket_address':    String -> ps::Internet_Address =   socket_fn "toUnixAddr";             # toUnixAddr            def in    src/c/lib/socket/string-to-unix-domain-socket-address.c
            my unix_domain_socket_address_to_string':    ps::Internet_Address -> String =   socket_fn "fromUnixAddr";           # fromUnixAddr          def in    src/c/lib/socket/unix-domain-socket-address-to-string.c
        herein

            fun string_to_unix_domain_socket_address  socket_path
                =
                ps::ADDRESS (string_to_unix_domain_socket_address' socket_path);

            fun unix_domain_socket_address_to_string (ps::ADDRESS socket_address)
                =
                unix_domain_socket_address_to_string'  socket_address;
        end;

        package stream {
            #
            fun socket ()          =  gs::socket       (unix_address_family, sg::socket::stream);
            fun socket' proto      =  gs::socket'      (unix_address_family, sg::socket::stream, proto);
            fun socket_pair ()     =  gs::socket_pair  (unix_address_family, sg::socket::stream);
            fun socket_pair' proto =  gs::socket_pair' (unix_address_family, sg::socket::stream, proto);
        };

        package datagram {
            #
            fun socket ()          =  gs::socket       (unix_address_family, sg::socket::datagram);
            fun socket' proto      =  gs::socket'      (unix_address_family, sg::socket::datagram, proto);
            fun socket_pair ()     =  gs::socket_pair  (unix_address_family, sg::socket::datagram);
            fun socket_pair' proto =  gs::socket_pair' (unix_address_family, sg::socket::datagram, proto);
        };
    };
end;

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


Comments and suggestions to: bugs@mythryl.org

PreviousUpNext