1 #include "ace/OS_NS_stropts.h"
5 #if !defined (ACE_HAS_INLINED_OSCALLS)
6 # include "ace/OS_NS_stropts.inl"
7 #endif /* ACE_HAS_INLINED_OSCALLS */
9 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
12 ACE_OS::ioctl (ACE_HANDLE socket
,
13 unsigned long io_control_code
,
15 unsigned long in_buffer
,
17 unsigned long out_buffer
,
18 unsigned long *bytes_returned
,
19 ACE_OVERLAPPED
*overlapped
,
20 ACE_OVERLAPPED_COMPLETION_FUNC func
)
22 # if defined (ACE_HAS_WINSOCK2) && (ACE_HAS_WINSOCK2 != 0)
23 ACE_SOCKCALL_RETURN (::WSAIoctl ((ACE_SOCKET
) socket
,
30 (WSAOVERLAPPED
*) overlapped
,
35 ACE_UNUSED_ARG (socket
);
36 ACE_UNUSED_ARG (io_control_code
);
37 ACE_UNUSED_ARG (in_buffer_p
);
38 ACE_UNUSED_ARG (in_buffer
);
39 ACE_UNUSED_ARG (out_buffer_p
);
40 ACE_UNUSED_ARG (out_buffer
);
41 ACE_UNUSED_ARG (bytes_returned
);
42 ACE_UNUSED_ARG (overlapped
);
43 ACE_UNUSED_ARG (func
);
44 ACE_NOTSUP_RETURN (-1);
45 # endif /* ACE_HAS_WINSOCK2 */
49 ACE_OS::ioctl (ACE_HANDLE socket
,
50 unsigned long io_control_code
,
52 unsigned long *bytes_returned
,
55 ACE_OVERLAPPED
*overlapped
,
56 ACE_OVERLAPPED_COMPLETION_FUNC func
)
58 # if defined (ACE_HAS_WINSOCK2) && (ACE_HAS_WINSOCK2 != 0)
59 if (io_control_code
== SIO_SET_QOS
)
62 unsigned long qos_len
= sizeof (QOS
);
64 qos
.SendingFlowspec
= *(ace_qos
.sending_flowspec ());
65 qos
.ReceivingFlowspec
= *(ace_qos
.receiving_flowspec ());
66 qos
.ProviderSpecific
= (WSABUF
) ace_qos
.provider_specific ();
68 qos_len
+= ace_qos
.provider_specific ().iov_len
;
70 ACE_SOCKCALL_RETURN (::WSAIoctl ((ACE_SOCKET
) socket
,
77 (WSAOVERLAPPED
*) overlapped
,
84 unsigned long dwBufferLen
= 0;
86 // Query for the buffer size.
87 int result
= ::WSAIoctl ((ACE_SOCKET
) socket
,
98 if (result
== SOCKET_ERROR
)
100 unsigned long dwErr
= ::WSAGetLastError ();
102 if (dwErr
== WSAEWOULDBLOCK
)
108 if (dwErr
!= WSAENOBUFS
)
116 ACE_NEW_RETURN (qos_buf
,
120 QOS
*qos
= reinterpret_cast<QOS
*> (qos_buf
);
122 result
= ::WSAIoctl ((ACE_SOCKET
) socket
,
132 if (result
== SOCKET_ERROR
)
135 ACE_Flow_Spec
sending_flowspec (qos
->SendingFlowspec
.TokenRate
,
136 qos
->SendingFlowspec
.TokenBucketSize
,
137 qos
->SendingFlowspec
.PeakBandwidth
,
138 qos
->SendingFlowspec
.Latency
,
139 qos
->SendingFlowspec
.DelayVariation
,
140 # if defined(ACE_HAS_WINSOCK2_GQOS)
141 qos
->SendingFlowspec
.ServiceType
,
142 qos
->SendingFlowspec
.MaxSduSize
,
143 qos
->SendingFlowspec
.MinimumPolicedSize
,
144 # else /* ACE_HAS_WINSOCK2_GQOS */
148 # endif /* ACE_HAS_WINSOCK2_GQOS */
152 ACE_Flow_Spec
receiving_flowspec (qos
->ReceivingFlowspec
.TokenRate
,
153 qos
->ReceivingFlowspec
.TokenBucketSize
,
154 qos
->ReceivingFlowspec
.PeakBandwidth
,
155 qos
->ReceivingFlowspec
.Latency
,
156 qos
->ReceivingFlowspec
.DelayVariation
,
157 # if defined(ACE_HAS_WINSOCK2_GQOS)
158 qos
->ReceivingFlowspec
.ServiceType
,
159 qos
->ReceivingFlowspec
.MaxSduSize
,
160 qos
->ReceivingFlowspec
.MinimumPolicedSize
,
161 # else /* ACE_HAS_WINSOCK2_GQOS */
165 # endif /* ACE_HAS_WINSOCK2_GQOS */
169 ace_qos
.sending_flowspec (&sending_flowspec
);
170 ace_qos
.receiving_flowspec (&receiving_flowspec
);
171 ace_qos
.provider_specific (*((struct iovec
*) (&qos
->ProviderSpecific
)));
178 ACE_UNUSED_ARG (socket
);
179 ACE_UNUSED_ARG (io_control_code
);
180 ACE_UNUSED_ARG (ace_qos
);
181 ACE_UNUSED_ARG (bytes_returned
);
182 ACE_UNUSED_ARG (buffer_p
);
183 ACE_UNUSED_ARG (buffer
);
184 ACE_UNUSED_ARG (overlapped
);
185 ACE_UNUSED_ARG (func
);
186 ACE_NOTSUP_RETURN (-1);
187 # endif /* ACE_HAS_WINSOCK2 */
190 ACE_END_VERSIONED_NAMESPACE_DECL