| open Thrift | 
 |  | 
 | module T = Transport | 
 |  | 
 | class t host port= | 
 | object (self) | 
 |   inherit T.t | 
 |   val mutable chans = None | 
 |   method isOpen = chans != None | 
 |   method opn = | 
 |     try | 
 |       let addr = (let {Unix.h_addr_list=x} = Unix.gethostbyname host in x.(0)) in | 
 |         chans <- Some(Unix.open_connection (Unix.ADDR_INET (addr,port))) | 
 |     with | 
 |         Unix.Unix_error (e,fn,_) -> raise (T.E (T.NOT_OPEN, ("TSocket: Could not connect to "^host^":"^(string_of_int port)^" because: "^fn^":"^(Unix.error_message e)))) | 
 |       | _ -> raise (T.E (T.NOT_OPEN, ("TSocket: Could not connect to "^host^":"^(string_of_int port)))) | 
 |  | 
 |   method close = | 
 |     match chans with | 
 |         None -> () | 
 |       | Some(inc,out) -> (Unix.shutdown_connection inc; | 
 |                           close_in inc; | 
 |                           chans <- None) | 
 |   method read buf off len = match chans with | 
 |       None -> raise (T.E (T.NOT_OPEN, "TSocket: Socket not open")) | 
 |     | Some(i,o) -> | 
 |         try | 
 |           really_input i buf off len; len | 
 |         with | 
 |             Unix.Unix_error (e,fn,_) -> raise (T.E (T.UNKNOWN, ("TSocket: Could not read "^(string_of_int len)^" from "^host^":"^(string_of_int port)^" because: "^fn^":"^(Unix.error_message e)))) | 
 |           | _ -> raise (T.E (T.UNKNOWN, ("TSocket: Could not read "^(string_of_int len)^" from "^host^":"^(string_of_int port)))) | 
 |   method write buf off len = match chans with | 
 |       None -> raise (T.E (T.NOT_OPEN, "TSocket: Socket not open")) | 
 |     | Some(i,o) -> output o buf off len | 
 |   method flush = match chans with | 
 |       None -> raise (T.E (T.NOT_OPEN, "TSocket: Socket not open")) | 
 |     | Some(i,o) -> flush o | 
 | end | 
 |  | 
 |  |