+fun sendOption f (bio, opt) =
+ case opt of
+ NONE => OpenSSL.writeInt (bio, 0)
+ | SOME x => (OpenSSL.writeInt (bio, 1);
+ f (bio, x))
+
+fun recvOption f bio =
+ case OpenSSL.readInt bio of
+ SOME 0 => SOME NONE
+ | SOME 1 =>
+ (case f bio of
+ SOME x => SOME (SOME x)
+ | NONE => NONE)
+ | _ => NONE
+