我正在进行网络可靠性模拟,我需要根据服务质量百分比模拟数据包丢弃。目前我有一个挂钩到send
,sendto
,recv
和recvfrom
的DLL。我的钩子然后根据服务质量“丢弃”数据包。
我只需要将挂钩应用于UDP数据包,而不是干扰TCP(TCP用于远程调试)。
有没有办法可以在WinSock中查询套接字绑定的协议?
int WSAAPI HookedSend(SOCKET s, const char FAR * buf, int len, int flags)
{
//if(s is UDP)
//Drop according to QOS
else
//Send TCP packets undisturbed
return send(s, buf, len, flags);
}
答案 0 :(得分:1)
我认为您可以使用getsockopt
:
int optVal;
int optLen = sizeof(int);
getsockopt(socket,
SOL_SOCKET,
SO_TYPE,
(char*)&optVal,
&optLen);
if(optVal = SOCK_STREAM)
printf("This is a TCP socket.\n");
else if(optVal = SOCK_DGRAM)
printf("This is a UTP socket.\n");
else
printf("Error");