请问第三个参数的三种情况(IPPROTO_TCP、IPPROTO_UDP、IPPROTO_IP)在实际程序中的区别?绝大多数的书籍直接填上0,即IPPROTO_IP的值,而《windows网络编程第二版》指明了创建流套接字用IPPROTO_TCP,创建数据报套接字用IPPROTO_UDP,究竟该如何处理更恰当?

解决方案 »

  1.   

    有看到过区别,但在使用中,TCP和UDP,或是RAW都是在第二个参数指定的,第三个通常为0
    原因我也说不出。
    听听楼下的。
      

  2.   

    宏定义声明如下:
    #define IPPROTO_IP              0               /* dummy for IP */
    #define IPPROTO_ICMP            1               /* control message protocol */
    #define IPPROTO_GGP             2               /* gateway^2 (deprecated) */
    #define IPPROTO_TCP             6               /* tcp */
    #define IPPROTO_PUP             12              /* pup */
    #define IPPROTO_UDP             17              /* user datagram protocol */
    #define IPPROTO_IDP             22              /* xns idp */
    #define IPPROTO_ND              77              /* UNOFFICIAL net disk proto */#define IPPROTO_RAW             255             /* raw IP packet */
    #define IPPROTO_MAX             256
    ...................在使用TCP/IP协议中,由于TCP/UDP都是基于IP协议的,所以默认0,就可以了,但要是使用原始套接字的话,就必须指定类型了。
      

  3.   

    在设置SOCKET类型的时候能用的上