Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Diff of /sml/branches/primop-branch/src/system/Basis/Implementation/Sockets/socket.sig
ViewVC logotype

Diff of /sml/branches/primop-branch/src/system/Basis/Implementation/Sockets/socket.sig

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1470, Mon Mar 29 22:45:55 2004 UTC revision 1471, Mon Mar 29 22:45:55 2004 UTC
# Line 7  Line 7 
7  local  local
8      structure OS = OSImp      structure OS = OSImp
9  in  in
10  signature SOCKET =  
11    (* We start with a version of this signature that does not contain
12     * any of the non-blocking operations: *)
13    signature SYNCHRONOUS_SOCKET =
14    sig    sig
15    
16    (* sockets are polymorphic; the instantiation of the type variables    (* sockets are polymorphic; the instantiation of the type variables
17     * provides a way to distinguish between different kinds of sockets.     * provides a way to distinguish between different kinds of sockets.
18     *)     *)
19      type ('af, 'sock) sock      type ('af, 'sock_type) sock
20      type 'af sock_addr      type 'af sock_addr
21    
22    (* witness types for the socket parameter *)    (* witness types for the socket parameter *)
23      type dgram      type dgram
24      type 'a stream      type 'mode stream
25      type passive        (* for passive streams *)      type passive        (* for passive streams *)
26      type active         (* for active (connected) streams *)      type active         (* for active (connected) streams *)
27    
# Line 46  Line 49 
49      structure Ctl : sig      structure Ctl : sig
50    
51        (* get/set socket options *)        (* get/set socket options *)
52          val getDEBUG            : ('a, 'b) sock -> bool          val getDEBUG            : ('af, 'sock_type) sock -> bool
53          val setDEBUG            : (('a, 'b) sock * bool) -> unit          val setDEBUG            : ('af, 'sock_type) sock * bool -> unit
54          val getREUSEADDR        : ('a, 'b) sock -> bool          val getREUSEADDR        : ('af, 'sock_type) sock -> bool
55          val setREUSEADDR        : (('a, 'b) sock * bool) -> unit          val setREUSEADDR        : ('af, 'sock_type) sock * bool -> unit
56          val getKEEPALIVE        : ('a, 'b) sock -> bool          val getKEEPALIVE        : ('af, 'sock_type) sock -> bool
57          val setKEEPALIVE        : (('a, 'b) sock * bool) -> unit          val setKEEPALIVE        : ('af, 'sock_type) sock * bool -> unit
58          val getDONTROUTE        : ('a, 'b) sock -> bool          val getDONTROUTE        : ('af, 'sock_type) sock -> bool
59          val setDONTROUTE        : (('a, 'b) sock * bool) -> unit          val setDONTROUTE        : ('af, 'sock_type) sock * bool -> unit
60          val getLINGER           : ('a, 'b) sock -> Time.time option          val getLINGER           : ('af, 'sock_type) sock
61          val setLINGER           : (('a, 'b) sock * Time.time option) -> unit                                       -> Time.time option
62          val getBROADCAST        : ('a, 'b) sock -> bool          val setLINGER           : ('af, 'sock_type) sock * Time.time option
63          val setBROADCAST        : (('a, 'b) sock * bool) -> unit                                      -> unit
64          val getOOBINLINE        : ('a, 'b) sock -> bool          val getBROADCAST        : ('af, 'sock_type) sock -> bool
65          val setOOBINLINE        : (('a, 'b) sock * bool) -> unit          val setBROADCAST        : ('af, 'sock_type) sock * bool -> unit
66          val getSNDBUF           : ('a, 'b) sock -> int          val getOOBINLINE        : ('af, 'sock_type) sock -> bool
67          val setSNDBUF           : (('a, 'b) sock * int) -> unit          val setOOBINLINE        : ('af, 'sock_type) sock * bool -> unit
68          val getRCVBUF           : ('a, 'b) sock -> int          val getSNDBUF           : ('af, 'sock_type) sock -> int
69          val setRCVBUF           : (('a, 'b) sock * int) -> unit          val setSNDBUF           : ('af, 'sock_type) sock * int -> unit
70          val getTYPE             : ('a, 'b) sock -> SOCK.sock_type          val getRCVBUF           : ('af, 'sock_type) sock -> int
71          val getERROR            : ('a, 'b) sock -> bool          val setRCVBUF           : ('af, 'sock_type) sock * int -> unit
72            val getTYPE             : ('af, 'sock_type) sock -> SOCK.sock_type
73          val getPeerName         : ('a, 'b) sock -> 'a sock_addr          val getERROR            : ('af, 'sock_type) sock -> bool
74          val getSockName         : ('a, 'b) sock -> 'a sock_addr  
75          val setNBIO             : (('a, 'b) sock * bool) -> unit          val getPeerName         : ('af, 'sock_type) sock -> 'af sock_addr
76          val getNREAD            : ('a, 'b) sock -> int          val getSockName         : ('af, 'sock_type) sock -> 'af sock_addr
77          val getATMARK           : ('a, active stream) sock -> bool          val getNREAD            : ('af, 'sock_type) sock -> int
78            val getATMARK           : ('af, active stream) sock -> bool
79        end (* Ctl *)        end (* Ctl *)
80    
81    (* socket address operations *)    (* socket address operations *)
82      val sameAddr     : ('a sock_addr * 'a sock_addr) -> bool      val sameAddr     : 'af sock_addr * 'af sock_addr -> bool
83      val familyOfAddr : 'a sock_addr -> AF.addr_family      val familyOfAddr : 'af sock_addr -> AF.addr_family
84    
85    (* socket management *)    (* socket management *)
86      val accept  : ('a, passive stream) sock      val bind      : ('af, 'sock_type) sock * 'af sock_addr -> unit
87                      -> (('a, active stream) sock * 'a sock_addr)      val listen    : ('af, passive stream) sock * int -> unit
88      val bind    : (('a, 'b) sock * 'a sock_addr) -> unit      val accept    : ('af, passive stream) sock
89      val connect : (('a, 'b) sock * 'a sock_addr) -> unit                      -> ('af, active stream) sock * 'af sock_addr
90      val listen  : (('a, passive stream) sock * int) -> unit      val connect   : ('af, 'sock_type) sock * 'af sock_addr -> unit
91      val close   : ('a, 'b) sock -> unit      val close     : ('af, 'sock_type) sock -> unit
92    
93      datatype shutdown_mode = NO_RECVS | NO_SENDS | NO_RECVS_OR_SENDS      datatype shutdown_mode = NO_RECVS | NO_SENDS | NO_RECVS_OR_SENDS
94      val shutdown : (('a, 'b stream) sock * shutdown_mode) -> unit      val shutdown : ('af, 'mode stream) sock * shutdown_mode -> unit
95    
96        type sock_desc
97        val sockDesc : ('af, 'sock_type) sock -> sock_desc
98        val sameDesc : sock_desc * sock_desc -> bool
99    
100        val select : { rds : sock_desc list,
101                       wrs : sock_desc list,
102                       exs : sock_desc list,
103                       timeout : Time.time option }
104                     -> { rds : sock_desc list,
105                          wrs : sock_desc list,
106                          exs : sock_desc list }
107    
108      val pollDesc : ('a, 'b) sock -> OS.IO.poll_desc      val ioDesc : ('af, 'sock_type) sock -> OS.IO.iodesc
109    
110    (* Sock I/O option types *)    (* Sock I/O option types *)
111      type out_flags = {don't_route : bool, oob : bool}      type out_flags = {don't_route : bool, oob : bool}
112      type in_flags = {peek : bool, oob : bool}      type in_flags = {peek : bool, oob : bool}
113    
     type 'a buf = {buf : 'a, i : int, sz : int option}  
   
114    (* Sock output operations *)    (* Sock output operations *)
115      val sendVec    : (('a, active stream) sock * Word8Vector.vector buf)      val sendVec    : ('af, active stream) sock * Word8VectorSlice.slice
                         -> int  
     val sendArr    : (('a, active stream) sock * Word8Array.array buf)  
                         -> int  
     val sendVec'   : (('a, active stream) sock * Word8Vector.vector buf * out_flags)  
                         -> int  
     val sendArr'   : (('a, active stream) sock * Word8Array.array buf * out_flags)  
116                          -> int                          -> int
117      val sendVecTo  : (('a, dgram) sock * 'a sock_addr * Word8Vector.vector buf)      val sendArr    : ('a, active stream) sock * Word8ArraySlice.slice
118                          -> int                          -> int
119      val sendArrTo  : (('a, dgram) sock * 'a sock_addr * Word8Array.array buf)      val sendVec'   : ('a, active stream) sock * Word8VectorSlice.slice * out_flags
120                          -> int                          -> int
121      val sendVecTo' : (('a, dgram) sock * 'a sock_addr * Word8Vector.vector buf * out_flags)      val sendArr'   : ('a, active stream) sock * Word8ArraySlice.slice * out_flags
                         -> int  
     val sendArrTo' : (('a, dgram) sock * 'a sock_addr * Word8Array.array buf * out_flags)  
122                          -> int                          -> int
123    
124        val sendVecTo  : ('a, dgram) sock * 'a sock_addr * Word8VectorSlice.slice
125                            -> unit
126        val sendArrTo  : ('a, dgram) sock * 'a sock_addr * Word8ArraySlice.slice
127                            -> unit
128        val sendVecTo' : ('a, dgram) sock * 'a sock_addr * Word8VectorSlice.slice * out_flags
129                            -> unit
130        val sendArrTo' : ('a, dgram) sock * 'a sock_addr * Word8ArraySlice.slice * out_flags
131                            -> unit
132    
133    (* Sock input operations *)    (* Sock input operations *)
134      val recvVec      : (('a, active stream) sock * int)      val recvVec      : ('a, active stream) sock * int
135                          -> Word8Vector.vector                          -> Word8Vector.vector
136      val recvArr      : (('a, active stream) sock * Word8Array.array buf)      val recvArr      : ('a, active stream) sock * Word8ArraySlice.slice
137                          -> int                          -> int
138      val recvVec'     : (('a, active stream) sock * int * in_flags)      val recvVec'     : ('a, active stream) sock * int * in_flags
139                          -> Word8Vector.vector                          -> Word8Vector.vector
140      val recvArr'     : (('a, active stream) sock * Word8Array.array buf * in_flags)      val recvArr'     : ('a, active stream) sock * Word8ArraySlice.slice * in_flags
141                          -> int                          -> int
     val recvVecFrom  : (('a, dgram) sock * int)  
                         -> (Word8Vector.vector * 'b sock_addr)  
     val recvArrFrom  : (('a, dgram) sock * {buf : Word8Array.array, i : int})  
                         -> (int * 'a sock_addr)  
     val recvVecFrom' : (('a, dgram) sock * int * in_flags)  
                         -> (Word8Vector.vector * 'b sock_addr)  
     val recvArrFrom' : (('a, dgram) sock * {buf : Word8Array.array, i : int} * in_flags)  
                         -> (int * 'a sock_addr)  
142    
143        val recvVecFrom  : ('a, dgram) sock * int
144                            -> Word8Vector.vector * 'b sock_addr
145        val recvArrFrom  : ('a, dgram) sock * Word8ArraySlice.slice
146                            -> int * 'a sock_addr
147        val recvVecFrom' : ('a, dgram) sock * int * in_flags
148                            -> Word8Vector.vector * 'b sock_addr
149        val recvArrFrom' : ('a, dgram) sock * Word8ArraySlice.slice * in_flags
150                            -> int * 'a sock_addr
151    end    end
 end  
152    
153    (* add non-blocking ops: *)
154    signature SOCKET =
155      sig
156        include SYNCHRONOUS_SOCKET
157    
158        val acceptNB  : ('af, passive stream) sock
159                        -> (('af, active stream) sock * 'af sock_addr) option
160        val connectNB : ('af, 'sock_type) sock * 'af sock_addr -> bool
161    
162        val sendVecNB  : ('af, active stream) sock * Word8VectorSlice.slice
163                           -> int option
164        val sendArrNB  : ('a, active stream) sock * Word8ArraySlice.slice
165                            -> int option
166        val sendVecNB' : ('a, active stream) sock * Word8VectorSlice.slice * out_flags
167                            -> int option
168        val sendArrNB' : ('a, active stream) sock * Word8ArraySlice.slice * out_flags
169                            -> int option
170    
171        val sendVecToNB: ('a, dgram) sock * 'a sock_addr * Word8VectorSlice.slice
172                            -> bool
173        val sendArrToNB: ('a, dgram) sock * 'a sock_addr * Word8ArraySlice.slice
174                            -> bool
175        val sendVecToNB':('a, dgram) sock * 'a sock_addr * Word8VectorSlice.slice * out_flags
176                            -> bool
177        val sendArrToNB':('a, dgram) sock * 'a sock_addr * Word8ArraySlice.slice * out_flags
178                            -> bool
179    
180        val recvVecNB    : ('a, active stream) sock * int
181                            -> Word8Vector.vector option
182        val recvArrNB    : ('a, active stream) sock * Word8ArraySlice.slice
183                            -> int option
184        val recvVecNB'   : ('a, active stream) sock * int * in_flags
185                            -> Word8Vector.vector option
186        val recvArrNB'   : ('a, active stream) sock * Word8ArraySlice.slice * in_flags
187                            -> int option
188    
189        val recvVecFromNB: ('a, dgram) sock * int
190                            -> (Word8Vector.vector * 'b sock_addr) option
191        val recvArrFromNB: ('a, dgram) sock * Word8ArraySlice.slice
192                            -> (int * 'a sock_addr) option
193        val recvVecFromNB':('a, dgram) sock * int * in_flags
194                            -> (Word8Vector.vector * 'b sock_addr) option
195        val recvArrFromNB':('a, dgram) sock * Word8ArraySlice.slice * in_flags
196                            -> (int * 'a sock_addr) option
197      end
198    end

Legend:
Removed from v.1470  
changed lines
  Added in v.1471

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0