在winsock中检索套接字的协议

时间:2011-02-04 03:30:05

标签: sockets network-programming winsock network-protocols

我正在进行网络可靠性模拟,我需要根据服务质量百分比模拟数据包丢弃。目前我有一个挂钩到sendsendtorecvrecvfrom的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);
}

1 个答案:

答案 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");