como posso pegar a velocidade de tranferencia de um socket?
A velocidade de uma placa de rede pode ser obtida (no caso do Windows) via WMI, mas a velocidade de transferência que você quer só dá para determinar fazendo o seguinte: medindo a quantidade de bytes que foram trafegados nesse socket e dividindo pelo tempo transcorrido.
Dá para avaliar a velocidade de transferência em uma conexão (não em um socket isolado) se você usar algum contador de performance do Windows. Veja a ferramenta “perfmon” e veja qual é o contador relevante para seu uso. No caso do Windows XP, Vista etc. dá para você chamar o Task Manager e olhar na aba “Networking”.
Como você provavelmente deve controlar a parte de escrita e leitura nesse socket, isso é plenamente possível.
Aconselha-se, para não achar um valor muito disparatado, usar um intervalo de tempo relativamente grande (1 segundo ou mais) e também fazer uma média móvel dos últimos valores lidos.
Divida a quantidade de bits enviados pelo tempo em segundos para obter a taxa de transferência em bps.