如果要使用这种模式,那么要设置SO_OOBINLINE套接口选项:
srtsocket(s,SOL_SOCKET,SO_OOBINLINE,&oobinline,sizeof(oobinline));
既然带内数据在普通数据中间,那么怎么知道具体在哪呢,这就需要用函数ioctl(2)确定紧急指针的位置。
1 2 3 4 5 6 7 |
<span style="color: #339933;">#include<sys/ioctl.h></span> <span style="color: #993333;">int</span> flag<span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;">//如果被标记则为TRUE</span> z<span style="color: #339933;">=</span>ioctl<span style="color: #009900;">(</span>s<span style="color: #339933;">,</span>SIOCATMARK<span style="color: #339933;">,&</span>amp<span style="color: #339933;">;</span>flag<span style="color: #009900;">)</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//成功返回0</span> |
下面是内嵌带内数据的主要代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
z<span style="color: #339933;">=</span>srtsocket<span style="color: #009900;">(</span>s<span style="color: #339933;">,</span> SOL_SOCKET<span style="color: #339933;">,</span> SO_OOBINLINE<span style="color: #339933;">,</span> <span style="color: #339933;">&</span>amp<span style="color: #339933;">;</span>oobinline<span style="color: #339933;">,</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">(</span>oobinline<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">for</span><span style="color: #009900;">(</span><span style="color: #339933;">;;</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span> ioctl<span style="color: #009900;">(</span>s<span style="color: #339933;">,</span>SIOCATMARK<span style="color: #339933;">,&</span>amp<span style="color: #339933;">;</span>flag<span style="color: #009900;">)</span><span style="color: #339933;">;</span> recv<span style="color: #009900;">(</span>s<span style="color: #339933;">,</span>buf<span style="color: #339933;">,</span><span style="color: #993333;">sizeof</span><span style="color: #009900;">(</span>buf<span style="color: #009900;">)</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> <span style="color: #009900;">}</span> |
转载请注明:爱开源 » Linux Socket 学习笔记22-带外数据2