


## plain-socket.pkg
# Compiled by:
# src/lib/std/src/standard-core.sublibstipulate
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.pkgherein
package plain_socket # "generic" has a technical meaning; if this nomenclature isn't strongly standard, "plain_socket" would be shorter and clearer...? XXX BUGGO FIXME
: (weak) Plain_Socket # Plain_Socket is from src/lib/std/src/socket/plain-socket.api {
fun socket_fn fun_name
=
ci::find_c_function { lib_name => "socket", fun_name }; # socket is in src/c/lib/socket/cfun-list.h
my c_socket: (Int, Int, Int) -> ps::Socket_Fd # (domain, type, protocol) -> Socket_Fd
= # "c_socket" is probably "create_socket"
socket_fn "socket"; # socket def in src/c/lib/socket/socket.c
my c_socket_pair: (Int, Int, Int) -> (ps::Socket_Fd, ps::Socket_Fd)
= # "c_socket_pair" is probably "create_socket_pair"
socket_fn "socketPair"; # socketPair def in src/c/lib/socket/socketpair.c
fun fd2sock file_descriptor
=
ps::SOCKET { file_descriptor, nonblocking => REF FALSE };
# Create sockets using default protocol
#
fun socket (ps::af::ADDRESS_FAMILY (af, _), ps::socket::SOCKET_TYPE (ty, _))
=
fd2sock (c_socket (af, ty, 0));
fun socket_pair (ps::af::ADDRESS_FAMILY (af, _), ps::socket::SOCKET_TYPE (ty, _))
=
{ my (s1, s2) = c_socket_pair (af, ty, 0);
( fd2sock s1,
fd2sock s2
);
};
# Create sockets using the specified protocol
#
fun socket' (ps::af::ADDRESS_FAMILY (af, _), ps::socket::SOCKET_TYPE (ty, _), protocol)
=
fd2sock (c_socket (af, ty, protocol));
fun socket_pair' (ps::af::ADDRESS_FAMILY (af, _), ps::socket::SOCKET_TYPE (ty, _), protocol)
=
{ my (s1, s2) = c_socket_pair (af, ty, protocol);
( fd2sock s1,
fd2sock s2
);
};
};
end;
## COPYRIGHT (c) 1995 AT&T Bell Laboratories.
## Subsequent changes by Jeff Prothero Copyright (c) 2010-2012,
## released under Gnu Public Licence version 3.


