1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677(*
* Copyright (C) 2016 Docker Inc
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
*)typevmid=|Wildcard|Children|Loopback|Parent|Idofstringtypesockaddr={vmid:vmid;serviceid:string;}externalget_wildcard:unit->string="stub_hvsock_wildcard"letwildcard=get_wildcard()externalget_children:unit->string="stub_hvsock_children"letchildren=get_children()externalget_loopback:unit->string="stub_hvsock_loopback"letloopback=get_loopback()externalget_parent:unit->string="stub_hvsock_parent"letparent=get_parent()letstring_of_vmid=function|Wildcard->wildcard|Children->children|Loopback->loopback|Parent->parent|Idx->xletvmid_of_stringx=ifx=wildcardthenWildcardelseifx=childrenthenChildrenelseifx=loopbackthenLoopbackelseifx=parentthenParentelseIdxexternaldo_socket:unit->Unix.file_descr="stub_hvsock_socket"externaldo_bind:Unix.file_descr->string->string->unit="stub_hvsock_bind"externaldo_accept:Unix.file_descr->Unix.file_descr*string*string="stub_hvsock_accept"externaldo_connect_blocking:Unix.file_descr->string->string->unit="stub_hvsock_connect_blocking"externaldo_connect_nonblocking:int->Unix.file_descr->string->string->unit="stub_hvsock_connect_nonblocking"letcreate=do_socketletbindfd{vmid;serviceid}=do_bindfd(string_of_vmidvmid)serviceidletacceptfd=let_,vmid,serviceid=do_acceptfdinletvmid=vmid_of_stringvmidinfd,{vmid;serviceid}letconnect?timeout_msfd{vmid;serviceid}=(matchtimeout_mswith|None->do_connect_blocking|Somet->do_connect_nonblockingt)fd(string_of_vmidvmid)serviceid