1*91df013fSAsim Jamshed<!-- Creator : groff version 1.22.2 --> 2*91df013fSAsim Jamshed<!-- CreationDate: Thu Feb 2 01:56:08 2017 --> 3*91df013fSAsim Jamshed<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 4*91df013fSAsim Jamshed"http://www.w3.org/TR/html4/loose.dtd"> 5*91df013fSAsim Jamshed<html> 6*91df013fSAsim Jamshed<head> 7*91df013fSAsim Jamshed<meta name="generator" content="groff -Thtml, see www.gnu.org"> 8*91df013fSAsim Jamshed<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> 9*91df013fSAsim Jamshed<meta name="Content-Style" content="text/css"> 10*91df013fSAsim Jamshed<style type="text/css"> 11*91df013fSAsim Jamshed p { margin-top: 0; margin-bottom: 0; vertical-align: top } 12*91df013fSAsim Jamshed pre { margin-top: 0; margin-bottom: 0; vertical-align: top } 13*91df013fSAsim Jamshed table { margin-top: 0; margin-bottom: 0; vertical-align: top } 14*91df013fSAsim Jamshed h1 { text-align: center } 15*91df013fSAsim Jamshed</style> 16*91df013fSAsim Jamshed<title>mtcp_socket</title> 17*91df013fSAsim Jamshed 18*91df013fSAsim Jamshed</head> 19*91df013fSAsim Jamshed<body> 20*91df013fSAsim Jamshed 21*91df013fSAsim Jamshed<h1 align="center">mtcp_socket</h1> 22*91df013fSAsim Jamshed 23*91df013fSAsim Jamshed<a href="#NAME">NAME</a><br> 24*91df013fSAsim Jamshed<a href="#SYNOPSIS">SYNOPSIS</a><br> 25*91df013fSAsim Jamshed<a href="#DESCRIPTION">DESCRIPTION</a><br> 26*91df013fSAsim Jamshed<a href="#RETURN VALUE">RETURN VALUE</a><br> 27*91df013fSAsim Jamshed<a href="#ERRORS">ERRORS</a><br> 28*91df013fSAsim Jamshed<a href="#AUTHORS">AUTHORS</a><br> 29*91df013fSAsim Jamshed<a href="#SEE ALSO">SEE ALSO</a><br> 30*91df013fSAsim Jamshed<a href="#COLOPHON">COLOPHON</a><br> 31*91df013fSAsim Jamshed 32*91df013fSAsim Jamshed<hr> 33*91df013fSAsim Jamshed 34*91df013fSAsim Jamshed 35*91df013fSAsim Jamshed<h2>NAME 36*91df013fSAsim Jamshed<a name="NAME"></a> 37*91df013fSAsim Jamshed</h2> 38*91df013fSAsim Jamshed 39*91df013fSAsim Jamshed 40*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">mtcp_socket 41*91df013fSAsim Jamshed− instantiate an mTCP socket for communication or 42*91df013fSAsim Jamshedmonitoring</p> 43*91df013fSAsim Jamshed 44*91df013fSAsim Jamshed<h2>SYNOPSIS 45*91df013fSAsim Jamshed<a name="SYNOPSIS"></a> 46*91df013fSAsim Jamshed</h2> 47*91df013fSAsim Jamshed 48*91df013fSAsim Jamshed 49*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em"><b>#include 50*91df013fSAsim Jamshed<mtcp_api.h></b></p> 51*91df013fSAsim Jamshed 52*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em"><b>int 53*91df013fSAsim Jamshedmtcp_socket(mctx_t</b> <i>mctx</i><b>, int</b> 54*91df013fSAsim Jamshed<i>domain</i><b>, int</b> <i>type</i><b>, int</b> 55*91df013fSAsim Jamshed<i>protocol</i><b>);</b></p> 56*91df013fSAsim Jamshed 57*91df013fSAsim Jamshed<h2>DESCRIPTION 58*91df013fSAsim Jamshed<a name="DESCRIPTION"></a> 59*91df013fSAsim Jamshed</h2> 60*91df013fSAsim Jamshed 61*91df013fSAsim Jamshed 62*91df013fSAsim Jamshed 63*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em"><b>mtcp_socket</b>() 64*91df013fSAsim Jamshedcan be used to create either a communication endpoint or a 65*91df013fSAsim Jamshedmiddlebox viewpoint for mTCP-based network connection. In 66*91df013fSAsim Jamshedmany ways, it behaves similar to a BSD socket. An 67*91df013fSAsim Jamshed<b>mtcp_socket</b>() call takes an additional argument named 68*91df013fSAsim Jamshed<i>mctx</i> that represents the per-core mTCP context in an 69*91df013fSAsim Jamshedapplication (see <b>mtcp_create_context()</b> for 70*91df013fSAsim Jamsheddetails).</p> 71*91df013fSAsim Jamshed 72*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">The 73*91df013fSAsim Jamshed<i>domain</i> argument is used to specify a communication 74*91df013fSAsim Jamsheddomain; in mTCP, the only available protocol family for the 75*91df013fSAsim Jamsheddomain is <b>AF_INET</b> which represents IPv4 Internet 76*91df013fSAsim Jamshedprotocol.</p> 77*91df013fSAsim Jamshed 78*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">The socket has 79*91df013fSAsim Jamshedthe indicated <i>type ,</i> which specifies the 80*91df013fSAsim Jamshedcommunication semantics. Currently defined types in mTCP 81*91df013fSAsim Jamshedare:</p> 82*91df013fSAsim Jamshed 83*91df013fSAsim Jamshed<table width="100%" border="0" rules="none" frame="void" 84*91df013fSAsim Jamshed cellspacing="0" cellpadding="0"> 85*91df013fSAsim Jamshed<tr valign="top" align="left"> 86*91df013fSAsim Jamshed<td width="11%"></td> 87*91df013fSAsim Jamshed<td width="35%"> 88*91df013fSAsim Jamshed 89*91df013fSAsim Jamshed 90*91df013fSAsim Jamshed<p><b>SOCK_STREAM</b></p></td> 91*91df013fSAsim Jamshed<td width="3%"></td> 92*91df013fSAsim Jamshed<td width="51%"> 93*91df013fSAsim Jamshed 94*91df013fSAsim Jamshed 95*91df013fSAsim Jamshed<p>Provides sequenced, reliable, full-duplex, 96*91df013fSAsim Jamshedconnection-based byte streams.</p></td></tr> 97*91df013fSAsim Jamshed<tr valign="top" align="left"> 98*91df013fSAsim Jamshed<td width="11%"></td> 99*91df013fSAsim Jamshed<td width="35%"> 100*91df013fSAsim Jamshed 101*91df013fSAsim Jamshed 102*91df013fSAsim Jamshed<p><b>MOS_SOCK_MONITOR_STREAM</b></p></td> 103*91df013fSAsim Jamshed<td width="3%"></td> 104*91df013fSAsim Jamshed<td width="51%"> 105*91df013fSAsim Jamshed 106*91df013fSAsim Jamshed 107*91df013fSAsim Jamshed<p>Provides a middlebox viewpoint for ongoing 108*91df013fSAsim Jamshedconnection-oriented flows.</p></td></tr> 109*91df013fSAsim Jamshed<tr valign="top" align="left"> 110*91df013fSAsim Jamshed<td width="11%"></td> 111*91df013fSAsim Jamshed<td width="35%"> 112*91df013fSAsim Jamshed 113*91df013fSAsim Jamshed 114*91df013fSAsim Jamshed<p><b>MOS_SOCK_MONITOR_RAW</b></p></td> 115*91df013fSAsim Jamshed<td width="3%"></td> 116*91df013fSAsim Jamshed<td width="51%"> 117*91df013fSAsim Jamshed 118*91df013fSAsim Jamshed 119*91df013fSAsim Jamshed<p>Provides a middlebox viewpoint for connection-less 120*91df013fSAsim Jamshedflows. This can be used as a tap to glean unsynchronized TCP 121*91df013fSAsim Jamshedpackets (no connection handshakes) or any other IP 122*91df013fSAsim Jamsheddatagrams.</p> </td></tr> 123*91df013fSAsim Jamshed</table> 124*91df013fSAsim Jamshed 125*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">The 126*91df013fSAsim Jamshed<i>protocol</i> argument represents the specific protocol ID 127*91df013fSAsim Jamshedto be used with the socket. mTCP assumes this argument to be 128*91df013fSAsim Jamshed0 (since it only supports single-protocol sockets).</p> 129*91df013fSAsim Jamshed 130*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">Sockets of type 131*91df013fSAsim Jamshed<b>SOCK_STREAM</b> represent full-duplex bytestreams. A 132*91df013fSAsim Jamshedstream socket must be in <b>ESTABLISHED</b> TCP state before 133*91df013fSAsim Jamsheddata can be sent or received on it. A connection to another 134*91df013fSAsim Jamshedpeer endpoint can be created with an <b>mtcp_connect()</b> 135*91df013fSAsim Jamshedcall. Once connected, data may be exchanged using 136*91df013fSAsim Jamshed<b>mtcp_read()</b> and <b>mtcp_write()</b> calls. When a 137*91df013fSAsim Jamshedsession needs to be terminated, <b>mtcp_close()</b> can be 138*91df013fSAsim Jamshedcalled. Socket operations can be manipulated using socket 139*91df013fSAsim Jamshedlevel options via <b>mtcp_setsockopt()</b> and 140*91df013fSAsim Jamshed<b>mtcp_getsockopt()</b> function calls. mTCP sockets run in 141*91df013fSAsim Jamshednon-blocking mode by default.</p> 142*91df013fSAsim Jamshed 143*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">Sockets of type 144*91df013fSAsim Jamshed<b>MOS_SOCK_MONITOR_STREAM</b> represent middlebox viewpoint 145*91df013fSAsim Jamshedof full-duplex bytestreams. A monitoring stream socket must 146*91df013fSAsim Jamshedbe in <b>ESTABLISHED</b> TCP state before TCP bytestreams 147*91df013fSAsim Jamshedcan be snooped from the TCP ring buffers of either client or 148*91df013fSAsim Jamshedserver TCP emulated stacks using either <b>mtcp_peek()</b> 149*91df013fSAsim Jamshedor <b>mtcp_ppeek()</b> functions. A stream monitoring socket 150*91df013fSAsim Jamshedcan be bound with a connection filter using 151*91df013fSAsim Jamshed<b>mtcp_bind_monitor_filter()</b> function. The user can use 152*91df013fSAsim Jamshed<b>mtcp_register_callback()</b> function to register the 153*91df013fSAsim Jamshedsocket with relevant mOS events. These can either be 154*91df013fSAsim Jamshedbuilt-in events or user-defined (custom) events. Like 155*91df013fSAsim Jamshed<b>SOCK_STREAM</b> sockets, operations can be manipulated 156*91df013fSAsim Jamshedusing socket level options via <b>mtcp_setsockopt()</b> and 157*91df013fSAsim Jamshed<b>mtcp_getsockopt()</b> function calls. A call to 158*91df013fSAsim Jamshed<b>mtcp_close()</b> function unregisters all flow events for 159*91df013fSAsim Jamshedthe socket, but it does not terminate the ongoing 160*91df013fSAsim Jamshedconnection.</p> 161*91df013fSAsim Jamshed 162*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">Sockets of type 163*91df013fSAsim Jamshed<b>MOS_SOCK_MONITOR_RAW</b> can be used to monitor network 164*91df013fSAsim Jamshedtraffic without connection semantics. Only packet-based 165*91df013fSAsim Jamshedfunctions such as <b>mtcp_getlastpkt()</b> can be utilized 166*91df013fSAsim Jamshedusing these sockets.</p> 167*91df013fSAsim Jamshed 168*91df013fSAsim Jamshed<h2>RETURN VALUE 169*91df013fSAsim Jamshed<a name="RETURN VALUE"></a> 170*91df013fSAsim Jamshed</h2> 171*91df013fSAsim Jamshed 172*91df013fSAsim Jamshed 173*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">Returns an mTCP 174*91df013fSAsim Jamsheddescriptor ID on success; -1 on failure. In case of failure, 175*91df013fSAsim Jamshed<i>errno</i> is set appropriately. Please note that each 176*91df013fSAsim JamshedmTCP context (referred to by <i>mctx</i> ) creates its own 177*91df013fSAsim Jamsheddedicated pool of sockets.</p> 178*91df013fSAsim Jamshed 179*91df013fSAsim Jamshed<h2>ERRORS 180*91df013fSAsim Jamshed<a name="ERRORS"></a> 181*91df013fSAsim Jamshed</h2> 182*91df013fSAsim Jamshed 183*91df013fSAsim Jamshed 184*91df013fSAsim Jamshed<table width="100%" border="0" rules="none" frame="void" 185*91df013fSAsim Jamshed cellspacing="0" cellpadding="0"> 186*91df013fSAsim Jamshed<tr valign="top" align="left"> 187*91df013fSAsim Jamshed<td width="11%"></td> 188*91df013fSAsim Jamshed<td width="18%"> 189*91df013fSAsim Jamshed 190*91df013fSAsim Jamshed 191*91df013fSAsim Jamshed<p style="margin-top: 1em"><b>EACCES</b></p></td> 192*91df013fSAsim Jamshed<td width="5%"></td> 193*91df013fSAsim Jamshed<td width="66%"> 194*91df013fSAsim Jamshed 195*91df013fSAsim Jamshed 196*91df013fSAsim Jamshed<p style="margin-top: 1em"><i>mctx</i> is not valid.</p></td></tr> 197*91df013fSAsim Jamshed<tr valign="top" align="left"> 198*91df013fSAsim Jamshed<td width="11%"></td> 199*91df013fSAsim Jamshed<td width="18%"> 200*91df013fSAsim Jamshed 201*91df013fSAsim Jamshed 202*91df013fSAsim Jamshed<p><b>EAFNOSUPPORT</b></p></td> 203*91df013fSAsim Jamshed<td width="5%"></td> 204*91df013fSAsim Jamshed<td width="66%"> 205*91df013fSAsim Jamshed 206*91df013fSAsim Jamshed 207*91df013fSAsim Jamshed<p><i>domain</i> is not supported.</p></td></tr> 208*91df013fSAsim Jamshed<tr valign="top" align="left"> 209*91df013fSAsim Jamshed<td width="11%"></td> 210*91df013fSAsim Jamshed<td width="18%"> 211*91df013fSAsim Jamshed 212*91df013fSAsim Jamshed 213*91df013fSAsim Jamshed<p><b>EINVAL</b></p></td> 214*91df013fSAsim Jamshed<td width="5%"></td> 215*91df013fSAsim Jamshed<td width="66%"> 216*91df013fSAsim Jamshed 217*91df013fSAsim Jamshed 218*91df013fSAsim Jamshed<p>The socket <i>type</i> is invalid.</p></td></tr> 219*91df013fSAsim Jamshed<tr valign="top" align="left"> 220*91df013fSAsim Jamshed<td width="11%"></td> 221*91df013fSAsim Jamshed<td width="18%"> 222*91df013fSAsim Jamshed 223*91df013fSAsim Jamshed 224*91df013fSAsim Jamshed<p><b>ENFILE</b></p></td> 225*91df013fSAsim Jamshed<td width="5%"></td> 226*91df013fSAsim Jamshed<td width="66%"> 227*91df013fSAsim Jamshed 228*91df013fSAsim Jamshed 229*91df013fSAsim Jamshed<p>No socket descriptor is available in the pool at the 230*91df013fSAsim Jamshedmoment.</p> </td></tr> 231*91df013fSAsim Jamshed</table> 232*91df013fSAsim Jamshed 233*91df013fSAsim Jamshed<h2>AUTHORS 234*91df013fSAsim Jamshed<a name="AUTHORS"></a> 235*91df013fSAsim Jamshed</h2> 236*91df013fSAsim Jamshed 237*91df013fSAsim Jamshed 238*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">mOS development 239*91df013fSAsim Jamshedteam <[email protected]></p> 240*91df013fSAsim Jamshed 241*91df013fSAsim Jamshed<h2>SEE ALSO 242*91df013fSAsim Jamshed<a name="SEE ALSO"></a> 243*91df013fSAsim Jamshed</h2> 244*91df013fSAsim Jamshed 245*91df013fSAsim Jamshed 246*91df013fSAsim Jamshed 247*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em"><b>mtcp_bind</b>(), 248*91df013fSAsim Jamshed<b>mtcp_listen</b>(), <b>mtcp_accept</b>(), 249*91df013fSAsim Jamshed<b>mtcp_connect</b>(), <b>mtcp_read</b>(), 250*91df013fSAsim Jamshed<b>mtcp_write</b>(), <b>mtcp_peek</b>(), 251*91df013fSAsim Jamshed<b>mtcp_ppeek</b>(), <b>mtcp_bind_monitor_filter</b>(), 252*91df013fSAsim Jamshed<b>mtcp_register_callback</b>(), 253*91df013fSAsim Jamshed<b>mtcp_getlastpkt</b>()</p> 254*91df013fSAsim Jamshed 255*91df013fSAsim Jamshed<h2>COLOPHON 256*91df013fSAsim Jamshed<a name="COLOPHON"></a> 257*91df013fSAsim Jamshed</h2> 258*91df013fSAsim Jamshed 259*91df013fSAsim Jamshed 260*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">This page is 261*91df013fSAsim Jamshedpart of mOS release 0.3 <i>docs</i> section. A description 262*91df013fSAsim Jamshedof the project, and information about reporting bugs, can be 263*91df013fSAsim Jamshedfound at http://mos.kaist.edu/.</p> 264*91df013fSAsim Jamshed<hr> 265*91df013fSAsim Jamshed</body> 266*91df013fSAsim Jamshed</html> 267