Network Programming for Windows读书笔记4

     2.WSASendDisconnect

    该函数非常特殊,一般不用.其原型是:

    int WSASendDisconnect(

      SOCKET s,

      LPWSABUF  lpOUT boundDisconnectData

      );

    该函数起初将套接字置为关闭状态,发送无连接的数据.当然,它只能用于支持从容关机和无连接数据的传输协议.目前还没有传输提供者支持无连接的数据.WSASendDisconnect函数的行为和利用SD_SEND参数调用shutdown函数差不多,但它另外还要发送包含在boundDisconnectData参数中的数据.后来的数据禁止在这个套接字上发送.如果调用失败,WSASendDisconnection就会返回SOCKET_ERROR.使用该函数可能会出现send函数中出现的某些错误.

    注:

    带外数据

     对已建立连接的流套接字上的应用来说,如果需要发送的数据比流上的普通数据重要得多,便可将这些重要数据标记成"带外数据"(Out-of-band,OOB).位于连接另一端的应用可通过一个独立的逻辑信道(从概念上讲,该逻辑信道与数据流无关)来接受和处理OOB数据.

 在TCP中,OOB数据由一个紧急1位标记(叫作URG)和TCP分段头中的一个16位的指针组成.这里的标记和指针把指定的下行流字节当作紧急数据.实现紧急数据的两种特殊方法目前只能在TCP.RFC793中见到,该索引对TCP进行了描述,并引入了"紧急数据"这一概念,表明TCP头中的紧急指针是紧急数据字节之后那个字节的绝对偏移.但是在RFC1122中,却将紧急偏移描述成指向紧急字节本身.

    Winsock规格中,与协议无关的OOB数据和TCP的OOB数据实施(紧急数据)均采用了OOB这一术语.要查看待发数据中是否包含紧急数据,必须通过SIOCATMARK选项调用ioctlsocket函数.第9章将介绍SIOCATMARK的用法.

  Winsock提供了获得紧急数据的几个方法.一是紧急数据一旦在线插入,它就会出现在普通数据流中;二是可以关闭在线插入,这样,不连续调用接受函数就会只返回紧急数据.至于控制OOB数据行为的套接字选项SO_OOBINLINE.

    Telnet和Rlogin使用紧急数据是有原因的.尽管如此,除非你计划编写自己的Telnet和Rlogin,否则就应该远离紧急数据.因为它不容易定义,而且其他平台上的实施情况可能和Win32有所不同。在拨不得已的情况下使用紧急数据,必须发信号通知通信方为紧急数据执行一个独立的控制套接字,并为普通数据的传输保留主要的套接字连接.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值