summaryrefslogtreecommitdiff
path: root/src/util.ml
diff options
context:
space:
mode:
Diffstat (limited to 'src/util.ml')
-rw-r--r--src/util.ml20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/util.ml b/src/util.ml
new file mode 100644
index 0000000..5502398
--- /dev/null
+++ b/src/util.ml
@@ -0,0 +1,20 @@
+open Unix
+
+type id = int * int
+let new_id () : id = (Random.int 100000, Random.int 100000)
+let id_str (a, b) = Format.sprintf "%d.%d" a b
+
+(* make_addr : string -> int -> sockaddr *)
+let make_addr host port =
+ let host = gethostbyname host in
+ ADDR_INET(host.h_addr_list.(Random.int (Array.length host.h_addr_list)), port)
+
+
+(* Unmarshal ONE message from a file descriptor, and DO NOT buffer more data *)
+let read_one_msg fd =
+ let hdr = String.create Marshal.header_size in
+ assert (read fd hdr 0 Marshal.header_size = Marshal.header_size);
+ let dlen = Marshal.data_size hdr 0 in
+ let data = String.create dlen in
+ assert (read fd data 0 dlen = dlen);
+ Marshal.from_string (hdr ^ data) 0