@@ -185,7 +185,7 @@ bool socket::send(context* context) const
185185 context->init ();
186186 context->_io_type = io_type::send;
187187#ifdef _WIN32
188- if (! context->buffer_list . has_value ())
188+ if (context->_buffer_list . empty ())
189189 {
190190 WSABUF wsaBuf {
191191 .len = static_cast <ULONG>(context->_buffer .size ()),
@@ -198,16 +198,8 @@ bool socket::send(context* context) const
198198 }
199199 else
200200 {
201- std::vector<WSABUF> wsabufs (context->buffer_list .value ().size ());
202- std::ranges::transform (context->buffer_list .value (), wsabufs.begin (), [](const auto & span) {
203- return WSABUF {
204- .len = static_cast <ULONG>(span.size ()),
205- .buf = span.data ()
206- };
207- });
208-
209201 DWORD dwSent = 0 ;
210- if (SOCKET_ERROR == WSASend (_sock, wsabufs .data (), static_cast <DWORD>(wsabufs .size ()), &dwSent, 0 , context, nullptr ))
202+ if (SOCKET_ERROR == WSASend (_sock, context-> _buffer_list .data (), static_cast <DWORD>(context-> _buffer_list .size ()), &dwSent, 0 , context, nullptr ))
211203 {
212204 return WSA_IO_PENDING == WSAGetLastError ();
213205 }
@@ -216,23 +208,16 @@ bool socket::send(context* context) const
216208 auto uring = native::get_handle ();
217209 auto sqe = io_uring_get_sqe (uring);
218210
219- if (! context->buffer_list . has_value ())
211+ if (context->_buffer_list . empty ())
220212 {
221- io_uring_prep_send (sqe, get_handle () , context->_buffer .data (), context->_buffer .size (), 0 );
213+ io_uring_prep_send (sqe, _sock , context->_buffer .data (), context->_buffer .size (), 0 );
222214 }
223215 else
224216 {
225- std::vector<iovec> iovecs (context->buffer_list ->size ());
226- std::ranges::transform (context->buffer_list .value (), iovecs.begin (), [](const auto & span) {
227- return iovec {
228- .iov_base = span.data (),
229- .iov_len = span.size ()
230- };
231- });;
232217 msghdr msg {};
233- msg.msg_iov = iovecs .data ();
234- msg.msg_iovlen = iovecs .size ();
235- io_uring_prep_sendmsg (sqe, get_handle () , &msg, 0 );
218+ msg.msg_iov = context-> _buffer_list .data ();
219+ msg.msg_iovlen = context-> _buffer_list .size ();
220+ io_uring_prep_sendmsg (sqe, _sock , &msg, 0 );
236221 }
237222
238223 io_uring_sqe_set_data (sqe, context);
@@ -250,7 +235,7 @@ bool socket::receive(context* context) const
250235 context->_io_type = io_type::receive;
251236#ifdef _WIN32
252237 DWORD recvBytes = 0 , flags = 0 ;
253- if (! context->buffer_list . has_value ())
238+ if (context->_buffer_list . empty ())
254239 {
255240 WSABUF wsaBuf {
256241 .len = static_cast <ULONG>(context->_buffer .size ()),
@@ -264,15 +249,7 @@ bool socket::receive(context* context) const
264249 }
265250 else
266251 {
267- std::vector<WSABUF> wsabufs (context->buffer_list ->size ());
268- std::ranges::transform (context->buffer_list .value (), wsabufs.begin (), [](const auto & span) {
269- return WSABUF {
270- .len = static_cast <ULONG>(span.size ()),
271- .buf = span.data ()
272- };
273- });
274-
275- if (SOCKET_ERROR == WSARecv (_sock, wsabufs.data (), static_cast <DWORD>(wsabufs.size ()), &recvBytes, &flags, context, nullptr ))
252+ if (SOCKET_ERROR == WSARecv (_sock, context->_buffer_list .data (), static_cast <DWORD>(context->_buffer_list .size ()), &recvBytes, &flags, context, nullptr ))
276253 {
277254 return WSA_IO_PENDING == WSAGetLastError ();
278255 }
@@ -281,22 +258,15 @@ bool socket::receive(context* context) const
281258 auto uring = native::get_handle ();
282259 auto sqe = io_uring_get_sqe (uring);
283260
284- if (! context->buffer_list . has_value ())
261+ if (context->_buffer_list . empty ())
285262 {
286263 io_uring_prep_recv (sqe, get_handle (), context->_buffer .data (), context->_buffer .size (), 0 );
287264 }
288265 else
289266 {
290- std::vector<iovec> iovecs (context->buffer_list ->size ());
291- std::ranges::transform (context->buffer_list .value (), iovecs.begin (), [](const auto & span) {
292- return iovec {
293- .iov_base = span.data (),
294- .iov_len = span.size ()
295- };
296- });;
297267 msghdr msg {};
298- msg.msg_iov = iovecs .data ();
299- msg.msg_iovlen = iovecs .size ();
268+ msg.msg_iov = context-> _buffer_list .data ();
269+ msg.msg_iovlen = context-> _buffer_list .size ();
300270 io_uring_prep_recvmsg (sqe, get_handle (), &msg, 0 );
301271 }
302272
0 commit comments