Получение протокола сокета в winsock - PullRequest
1 голос
/ 04 февраля 2011

Я работаю в симуляции надежности сети, мне нужно симулировать отбрасывание пакетов на основе процента качества обслуживания.В настоящее время у меня есть DLL, которая подключается к send, sendto, recv и recvfrom.Затем мои перехватчики «отбрасывают» пакеты в зависимости от качества обслуживания.

Мне просто нужно применить перехват для пакетов 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 Ответ

1 голос
/ 04 февраля 2011

Я думаю, вы можете получить тип сокета, используя 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");
...