winsock函数套接字期望作为协议的第三个参数,对于套接字类型SOCK_STREAM,通常是IPROTO_TCP,对于套接字类型SOCK_DGRAM,IPROTO_UDP通常是IPROTO_TCP。当我传递0值作为协议参数时,TCP和UDP按预期工作。winsock套接字函数中的协议参数是什么?
SOCKET s = socket(AF_INET, SOCK_DGRAM, 0)
// s is a valid socket
什么是IPROTO_IP协议参数值意味着什么?如果它只是用于SOCK_RAW,为什么会有这种冗余?
socket(AF_INET, SOCK_STREAM, IPROTO_TCP);
socket(AF_INET, SOCK_DGRAM, IPROTO_UDP);
实际上协议参数指定了什么?当我可以使用另一个值时,它看起来不重要。
我想从带有多个网络卡的PC发送UDP数据包(包括广播)到特定的以太网段。虽然IP路由通常选择网卡(和源地址),但我想指定适配器并考虑原始套接字或任何其他方式来实现此目标。在这种情况下,IPPROTO_IP可能会有所帮助。