1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
QOS qos;
ZeroMemory((char *)&qos, sizeof(qos));
//Set the Flow Spec
qos.ReceivingFlowspec.DelayVariation = QOS_NOT_SPECIFIED;
qos.ReceivingFlowspec.Latency = QOS_NOT_SPECIFIED;
qos.ReceivingFlowspec.MaxSduSize = QOS_NOT_SPECIFIED;
qos.ReceivingFlowspec.MinimumPolicedSize = QOS_NOT_SPECIFIED;
qos.ReceivingFlowspec.PeakBandwidth = POSITIVE_INFINITY_RATE;
qos.ReceivingFlowspec.ServiceType = qosLevel | SERVICE_NO_QOS_SIGNALING ;
qos.ReceivingFlowspec.TokenBucketSize = QOS_NOT_SPECIFIED;
qos.ReceivingFlowspec.TokenRate = 15000;
qos.SendingFlowspec.DelayVariation = QOS_NOT_SPECIFIED;
qos.SendingFlowspec.Latency = QOS_NOT_SPECIFIED;
qos.SendingFlowspec.MaxSduSize = QOS_NOT_SPECIFIED ;
qos.SendingFlowspec.MinimumPolicedSize = QOS_NOT_SPECIFIED;
qos.SendingFlowspec.PeakBandwidth = POSITIVE_INFINITY_RATE;
qos.SendingFlowspec.ServiceType = qosLevel | SERVICE_NO_QOS_SIGNALING ;
qos.SendingFlowspec.TokenBucketSize = QOS_NOT_SPECIFIED;
qos.SendingFlowspec.TokenRate = 15000;
qos.ProviderSpecific.len = 0;
qos.ProviderSpecific.buf = NULL;
QOS_DESTADDR QosDestaddr;
if( iSocketType == SOCK_DGRAM && remoteaddr != NULL)
{
// When SIO_SET_QOS is used to set QOS with QOS_DESTADDR for unconnected UDP, the
// socket must be locally bound first, otherwise SIO_SET_QOS will fail with 10022.
// CAVEATS : This is done before this method is called.
ZeroMemory((char *)&QosDestaddr, sizeof(QosDestaddr));
QosDestaddr.ObjectHdr.ObjectType = QOS_OBJECT_DESTADDR;
QosDestaddr.ObjectHdr.ObjectLength = sizeof(QosDestaddr);
QosDestaddr.SocketAddress = (SOCKADDR *)remoteaddr;
QosDestaddr.SocketAddressLength = sizeof(SOCKADDR);
qos.ProviderSpecific.len = QosDestaddr.ObjectHdr.ObjectLength;
qos.ProviderSpecific.buf = (char *)&QosDestaddr;
}
if (WSAIoctl(aSocket, SIO_SET_QOS, &qos, sizeof(QOS), NULL, 0, &dwBytesReturned, NULL, NULL) == SOCKET_ERROR)
{
return FALSE;
} |
Partager