2011-02-04 88 views
1

我正在從事網絡可靠性模擬工作,我需要根據服務質量百分比模擬丟包。目前我有一個DLL掛鉤到sendsendto,recvrecvfrom。然後,我的鉤子根據服務質量「丟棄」數據包。在winsock中檢索套接字協議

我只需要將掛鉤應用於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

我想你可以通過使用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"); 
+0

該選項SO_BSP_STATE返回ADDRES,端口和協議的getsockopt文檔中找到。謝謝 – 2011-02-04 04:29:25