1*91df013fSAsim Jamshed<!-- Creator : groff version 1.22.2 --> 2*91df013fSAsim Jamshed<!-- CreationDate: Fri Feb 3 15:23:32 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_peek</title> 17*91df013fSAsim Jamshed 18*91df013fSAsim Jamshed</head> 19*91df013fSAsim Jamshed<body> 20*91df013fSAsim Jamshed 21*91df013fSAsim Jamshed<h1 align="center">mtcp_peek</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="#NOTES">NOTES</a><br> 29*91df013fSAsim Jamshed<a href="#AUTHORS">AUTHORS</a><br> 30*91df013fSAsim Jamshed<a href="#SEE ALSO">SEE ALSO</a><br> 31*91df013fSAsim Jamshed<a href="#COLOPHON">COLOPHON</a><br> 32*91df013fSAsim Jamshed 33*91df013fSAsim Jamshed<hr> 34*91df013fSAsim Jamshed 35*91df013fSAsim Jamshed 36*91df013fSAsim Jamshed<h2>NAME 37*91df013fSAsim Jamshed<a name="NAME"></a> 38*91df013fSAsim Jamshed</h2> 39*91df013fSAsim Jamshed 40*91df013fSAsim Jamshed 41*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">mtcp_peek 42*91df013fSAsim Jamshed− Peek into the bytestream from a monitoring 43*91df013fSAsim Jamshedsocket</p> 44*91df013fSAsim Jamshed 45*91df013fSAsim Jamshed<h2>SYNOPSIS 46*91df013fSAsim Jamshed<a name="SYNOPSIS"></a> 47*91df013fSAsim Jamshed</h2> 48*91df013fSAsim Jamshed 49*91df013fSAsim Jamshed 50*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em"><b>#include 51*91df013fSAsim Jamshed<mos_api.h></b></p> 52*91df013fSAsim Jamshed 53*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em"><b>ssize_t 54*91df013fSAsim Jamshedmtcp_peek(mctx_t</b> <i>mctx</i><b>, int</b> 55*91df013fSAsim Jamshed<i>sockid</i><b>, int</b> <i>side</i><b>, char 56*91df013fSAsim Jamshed*</b><i>buf</i><b>, size_t</b> <i>len</i><b>);</b></p> 57*91df013fSAsim Jamshed 58*91df013fSAsim Jamshed<h2>DESCRIPTION 59*91df013fSAsim Jamshed<a name="DESCRIPTION"></a> 60*91df013fSAsim Jamshed</h2> 61*91df013fSAsim Jamshed 62*91df013fSAsim Jamshed 63*91df013fSAsim Jamshed 64*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em"><b>mtcp_peek</b>() 65*91df013fSAsim Jamshedcan be used to peek up to <i>len</i> number of bytes from a 66*91df013fSAsim Jamshedmonitoring socket via socket descriptor <i>sockid</i> into 67*91df013fSAsim Jamshedthe buffer (unfragmented) starting at <i>buf.</i> It is the 68*91df013fSAsim Jamshedresponsibility of the user to allocate memory for <i>buf</i> 69*91df013fSAsim Jamshedarray.</p> 70*91df013fSAsim Jamshed 71*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">For cases when 72*91df013fSAsim Jamshedthe total number of buffered unread bytes in the socket are 73*91df013fSAsim Jamshedless than <i>len,</i> <b>mtcp_peek()</b> copies entire data 74*91df013fSAsim Jamshedto <i>buf</i> and returns the actual number of bytes that 75*91df013fSAsim Jamshedcan be used by the application.</p> 76*91df013fSAsim Jamshed 77*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">An 78*91df013fSAsim Jamshed<b>mtcp_peek</b>() call takes two additional argument named 79*91df013fSAsim Jamshed<i>mctx ,</i> that represents the per-core mTCP context in 80*91df013fSAsim Jamshedan application (see <b>mtcp_create_context()</b> for 81*91df013fSAsim Jamsheddetails); and <i>side</i> that informs the stack whether it 82*91df013fSAsim Jamshedneeds to peek the client (MOS_SIDE_CLI) or server 83*91df013fSAsim Jamshed(MOS_SIDE_SVR) side.</p> 84*91df013fSAsim Jamshed 85*91df013fSAsim Jamshed<h2>RETURN VALUE 86*91df013fSAsim Jamshed<a name="RETURN VALUE"></a> 87*91df013fSAsim Jamshed</h2> 88*91df013fSAsim Jamshed 89*91df013fSAsim Jamshed 90*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">On success, the 91*91df013fSAsim Jamshednumber of bytes read is returned. It is not an error if this 92*91df013fSAsim Jamshednumber is smaller than the number of bytes requested; this 93*91df013fSAsim Jamshedmay happen when the socket has fewer number of bytes 94*91df013fSAsim Jamshedbuffered at that moment. On all errors, -1 is returned and 95*91df013fSAsim Jamshed<i>errno</i> is set appropriately.</p> 96*91df013fSAsim Jamshed 97*91df013fSAsim Jamshed<h2>ERRORS 98*91df013fSAsim Jamshed<a name="ERRORS"></a> 99*91df013fSAsim Jamshed</h2> 100*91df013fSAsim Jamshed 101*91df013fSAsim Jamshed 102*91df013fSAsim Jamshed<table width="100%" border="0" rules="none" frame="void" 103*91df013fSAsim Jamshed cellspacing="0" cellpadding="0"> 104*91df013fSAsim Jamshed<tr valign="top" align="left"> 105*91df013fSAsim Jamshed<td width="11%"></td> 106*91df013fSAsim Jamshed<td width="12%"> 107*91df013fSAsim Jamshed 108*91df013fSAsim Jamshed 109*91df013fSAsim Jamshed<p style="margin-top: 1em"><b>EACCES</b></p></td> 110*91df013fSAsim Jamshed<td width="3%"></td> 111*91df013fSAsim Jamshed<td width="74%"> 112*91df013fSAsim Jamshed 113*91df013fSAsim Jamshed 114*91df013fSAsim Jamshed<p style="margin-top: 1em">The <i>mctx</i> argument is 115*91df013fSAsim Jamshedinvalid.</p> </td></tr> 116*91df013fSAsim Jamshed<tr valign="top" align="left"> 117*91df013fSAsim Jamshed<td width="11%"></td> 118*91df013fSAsim Jamshed<td width="12%"> 119*91df013fSAsim Jamshed 120*91df013fSAsim Jamshed 121*91df013fSAsim Jamshed<p><b>EBADF</b></p></td> 122*91df013fSAsim Jamshed<td width="3%"></td> 123*91df013fSAsim Jamshed<td width="74%"> 124*91df013fSAsim Jamshed 125*91df013fSAsim Jamshed 126*91df013fSAsim Jamshed<p>The socket descriptor <i>sockid</i> is invalid.</p></td></tr> 127*91df013fSAsim Jamshed<tr valign="top" align="left"> 128*91df013fSAsim Jamshed<td width="11%"></td> 129*91df013fSAsim Jamshed<td width="12%"> 130*91df013fSAsim Jamshed 131*91df013fSAsim Jamshed 132*91df013fSAsim Jamshed<p><b>EINVAL</b></p></td> 133*91df013fSAsim Jamshed<td width="3%"></td> 134*91df013fSAsim Jamshed<td width="74%"> 135*91df013fSAsim Jamshed 136*91df013fSAsim Jamshed 137*91df013fSAsim Jamshed<p>The buffer management of the monitoring socket with 138*91df013fSAsim Jamshed<i>sockid</i> was already disabled.</p></td></tr> 139*91df013fSAsim Jamshed<tr valign="top" align="left"> 140*91df013fSAsim Jamshed<td width="11%"></td> 141*91df013fSAsim Jamshed<td width="12%"> 142*91df013fSAsim Jamshed 143*91df013fSAsim Jamshed 144*91df013fSAsim Jamshed<p><b>ENOTSOCK</b></p></td> 145*91df013fSAsim Jamshed<td width="3%"></td> 146*91df013fSAsim Jamshed<td width="74%"> 147*91df013fSAsim Jamshed 148*91df013fSAsim Jamshed 149*91df013fSAsim Jamshed<p>The socket referred to by <i>sockid</i> has invalid 150*91df013fSAsim Jamshed<i>type</i></p> </td></tr> 151*91df013fSAsim Jamshed<tr valign="top" align="left"> 152*91df013fSAsim Jamshed<td width="11%"></td> 153*91df013fSAsim Jamshed<td width="12%"> 154*91df013fSAsim Jamshed 155*91df013fSAsim Jamshed 156*91df013fSAsim Jamshed<p><b>ENOTCONN</b></p></td> 157*91df013fSAsim Jamshed<td width="3%"></td> 158*91df013fSAsim Jamshed<td width="74%"> 159*91df013fSAsim Jamshed 160*91df013fSAsim Jamshed 161*91df013fSAsim Jamshed<p>Th socket referred to by <i>sockid</i> is in a TCP state 162*91df013fSAsim Jamshedthat disallows read operations.</p></td></tr> 163*91df013fSAsim Jamshed<tr valign="top" align="left"> 164*91df013fSAsim Jamshed<td width="11%"></td> 165*91df013fSAsim Jamshed<td width="12%"> 166*91df013fSAsim Jamshed 167*91df013fSAsim Jamshed 168*91df013fSAsim Jamshed<p><b>ENODATA</b></p></td> 169*91df013fSAsim Jamshed<td width="3%"></td> 170*91df013fSAsim Jamshed<td width="74%"> 171*91df013fSAsim Jamshed 172*91df013fSAsim Jamshed 173*91df013fSAsim Jamshed<p>The socket referred to by <i>sockid</i> does not have 174*91df013fSAsim Jamshedany available bytes in its buffer for reading.</p></td></tr> 175*91df013fSAsim Jamshed<tr valign="top" align="left"> 176*91df013fSAsim Jamshed<td width="11%"></td> 177*91df013fSAsim Jamshed<td width="12%"> 178*91df013fSAsim Jamshed 179*91df013fSAsim Jamshed 180*91df013fSAsim Jamshed<p><b>EPERM</b></p></td> 181*91df013fSAsim Jamshed<td width="3%"></td> 182*91df013fSAsim Jamshed<td width="74%"> 183*91df013fSAsim Jamshed 184*91df013fSAsim Jamshed 185*91df013fSAsim Jamshed<p>The caller is not permitted to access this function.</p></td></tr> 186*91df013fSAsim Jamshed</table> 187*91df013fSAsim Jamshed 188*91df013fSAsim Jamshed<h2>NOTES 189*91df013fSAsim Jamshed<a name="NOTES"></a> 190*91df013fSAsim Jamshed</h2> 191*91df013fSAsim Jamshed 192*91df013fSAsim Jamshed 193*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">Since TCP flow 194*91df013fSAsim Jamshedcontrol applies between end-hosts, the receive buffer 195*91df013fSAsim Jamshedmanaged by mOS can become full while new packets continue to 196*91df013fSAsim Jamshedarrive. Silent TCP ring buffer overwriting is undesirable 197*91df013fSAsim Jamshedsince the application may not notice the buffer overflow. 198*91df013fSAsim JamshedInstead, mOS raises an error event to explicitly notify the 199*91df013fSAsim Jamshedapplication about the buffer overflow. The application can 200*91df013fSAsim Jamshedeither drain the buffer by reading the data (by calling 201*91df013fSAsim Jamshed<b>mtcp_peek())</b> or enlarge the buffer (by calling 202*91df013fSAsim Jamshed<b>mtcp_setsockopt()).</b> Otherwise, the stack overwrites 203*91df013fSAsim Jamshedthe buffer with the new data, and adjusts the internal peek 204*91df013fSAsim Jamshedpointer. To notify the application about the overwriting, 205*91df013fSAsim Jamshed<b>mtcp_peek()</b> fails right after overwriting. Subsequent 206*91df013fSAsim Jamshedfunction calls continue to read the data from the new 207*91df013fSAsim Jamshedposition.</p> 208*91df013fSAsim Jamshed 209*91df013fSAsim Jamshed<h2>AUTHORS 210*91df013fSAsim Jamshed<a name="AUTHORS"></a> 211*91df013fSAsim Jamshed</h2> 212*91df013fSAsim Jamshed 213*91df013fSAsim Jamshed 214*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">mOS development 215*91df013fSAsim Jamshedteam <[email protected]></p> 216*91df013fSAsim Jamshed 217*91df013fSAsim Jamshed<h2>SEE ALSO 218*91df013fSAsim Jamshed<a name="SEE ALSO"></a> 219*91df013fSAsim Jamshed</h2> 220*91df013fSAsim Jamshed 221*91df013fSAsim Jamshed 222*91df013fSAsim Jamshed 223*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em"><b>mtcp_ppeek</b>(), 224*91df013fSAsim Jamshed<b>mtcp_socket</b>(), <b>mtcp_getsockopt</b>()</p> 225*91df013fSAsim Jamshed 226*91df013fSAsim Jamshed<h2>COLOPHON 227*91df013fSAsim Jamshed<a name="COLOPHON"></a> 228*91df013fSAsim Jamshed</h2> 229*91df013fSAsim Jamshed 230*91df013fSAsim Jamshed 231*91df013fSAsim Jamshed<p style="margin-left:11%; margin-top: 1em">This page is 232*91df013fSAsim Jamshedpart of mOS release 0.3 <i>docs</i> section. A description 233*91df013fSAsim Jamshedof the project, and information about reporting bugs, can be 234*91df013fSAsim Jamshedfound at http://mos.kaist.edu/.</p> 235*91df013fSAsim Jamshed<hr> 236*91df013fSAsim Jamshed</body> 237*91df013fSAsim Jamshed</html> 238