## 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.pkgherein
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.