val in_stream =
BinIO.mkInstream
(BinIO.StreamIO.mkInstream (rd, Word8Vector.fromList []));
val out_stream =
BinIO.mkOutstream
(BinIO.StreamIO.mkOutstream (wr, IO.BLOCK_BUF));
in (in_stream, out_stream) end;
fun socket_name_inet name =
(case space_explode ":" name of
[h, p] =>
(case (NetHostDB.getByName h, Int.fromString p) of
(SOME host, SOME port) => SOME (host, port)
| _ => NONE)
| _ => NONE);
fun open_streams_inet (host, port) = let val socket: Socket.active INetSock.stream_sock = INetSock.TCP.socket (); val _ = Socket.connect (socket, INetSock.toAddr (NetHostDB.addr host, port));
val (socket_host, socket_port) = INetSock.fromAddr (Socket.Ctl.getSockName socket); val socket_name = NetHostDB.toString socket_host ^ ":" ^ string_of_int socket_port; in make_streams socket_name socket end;
fun open_streams_unix path =
\<^if_windows>\<open>raise Fail "Cannot create Unix-domain socket on Windows"\<close>
\<^if_unix>\<open> let val socket_name = File.platform_path path; val socket: Socket.active UnixSock.stream_sock = UnixSock.Strm.socket (); val _ = Socket.connect (socket, UnixSock.toAddr socket_name); in make_streams socket_name socket end\<close>
fun open_streams name =
(case socket_name_inet name of
SOME inet => open_streams_inet inet
| NONE =>
(casetry Path.explode name of
SOME path => open_streams_unix path
| NONE => error ("Bad socket name: " ^ quote name))) handle OS.SysErr (msg, _) => error (msg ^ ": failed to open socket " ^ name);
fun with_streams f =
Thread_Attributes.uninterruptible (fn run => fn name => let val streams = open_streams name; val result = Exn.capture (run f) streams; val _ = BinIO.closeIn (#1 streams); val _ = BinIO.closeOut (#2 streams); in Exn.release result end);
fun with_streams' f name password =
with_streams (fn streams =>
(Byte_Message.write_line (#2 streams) (Bytes.string password); f streams)) name;
end;
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.