1、用select函数怎么知道有带外数据到达?MSDN只提供了read和write两个选项;可wsasysselect好象就提供了。
2、为什么用setsockopt设置OOB_INLINE选项总是报失败?我设的是原始套接字。
3、如果知道当前有带外数据到达,该如何接收?用receive还是receivefrom?
4、如果要发送带外数据,该怎么发送?用send还是sendto?
5、必须是基于stream的套接字才能发送和接受带外数据吗?
6、另外,用sendto可以向基于流的socket发送数据吗?比如想实现地址欺骗。

解决方案 »

  1.   

    int select(
      int nfds,                           
      fd_set FAR *readfds,               
      fd_set FAR *writefds,              
      fd_set FAR *exceptfds,             
      const struct timeval FAR *timeout  
    );
    第一个问题已经解决了,exceptfds就是啊。
      

  2.   

    楼上:我用的socket,不是mfc的类.
      

  3.   

    int PASCAL FAR send(SOCKET s, const char FAR *buf, int len, int flags); 参数s为已连接的本地套接字描述符。buf 指向存有发送数据的缓冲区的指针,其长度由len 指定。flags 指定传输控制方式,如是否发送带外数据等。如果没有错误发生,send()返回总共发送的字节数。否则它返回SOCKET_ERROR。 http://www.ddvip.net/os/scounix/index/41.htm
    这里有详细描述
      

  4.   

    http://www.vckbase.com/document/viewdoc/?id=1036
      

  5.   

    flag为MSG_OOB的时候表示数据应该被带外发送或接收
    应该只有tcp才能发送带外数据,你看看udp包头是不是没有带外数据标志位
    所以接收当然用recv,发送用send