diff --git a/components/net/cpp/src/peer.cpp b/components/net/cpp/src/peer.cpp index 1e63218c2e75ed21efe893825a293f8f2264969b..ca2e13a0373068129aa45c7d8d891263b6d07e56 100644 --- a/components/net/cpp/src/peer.cpp +++ b/components/net/cpp/src/peer.cpp @@ -664,6 +664,8 @@ void Peer::_connected() { int Peer::_send() { if (sock_ == INVALID_SOCKET) return -1; + int c=0; + // Are we using a websocket? if (scheme_ == ftl::URI::SCHEME_WS) { // Create a websocket header as well. @@ -690,24 +692,42 @@ int Peer::_send() { // Patch the first io vector to be ws header const_cast<iovec*>(&sendvec[0])->iov_base = buf; const_cast<iovec*>(&sendvec[0])->iov_len = rc; - } #ifdef WIN32 - auto send_vec = send_buf_.vector(); - auto send_size = send_buf_.vector_size(); - vector<WSABUF> wsabuf(send_size); - - for (int i = 0; i < send_size; i++) { - wsabuf[i].len = (ULONG)send_vec[i].iov_len; - wsabuf[i].buf = (char*)send_vec[i].iov_base; - //c += ftl::net::internal::send(sock_, (char*)send_vec[i].iov_base, (int)send_vec[i].iov_len, 0); - } + auto send_vec = send_buf_.vector(); + auto send_size = send_buf_.vector_size(); + vector<WSABUF> wsabuf(send_size); + + for (int i = 0; i < send_size; i++) { + wsabuf[i].len = (ULONG)send_vec[i].iov_len; + wsabuf[i].buf = (char*)send_vec[i].iov_base; + //c += ftl::net::internal::send(sock_, (char*)send_vec[i].iov_base, (int)send_vec[i].iov_len, 0); + } + + DWORD bytessent; + c = WSASend(sock_, wsabuf.data(), static_cast<DWORD>(send_size), (LPDWORD)&bytessent, 0, NULL, NULL); +#else + c = ftl::net::internal::writev(sock_, send_buf_.vector(), (int)send_buf_.vector_size()); +#endif + + } else { +#ifdef WIN32 + auto send_vec = send_buf_.vector(); + auto send_size = send_buf_.vector_size(); + vector<WSABUF> wsabuf(send_size); + + for (int i = 0; i < send_size; i++) { + wsabuf[i].len = (ULONG)send_vec[i].iov_len; + wsabuf[i].buf = (char*)send_vec[i].iov_base; + //c += ftl::net::internal::send(sock_, (char*)send_vec[i].iov_base, (int)send_vec[i].iov_len, 0); + } - DWORD bytessent; - int c = WSASend(sock_, wsabuf.data(), static_cast<DWORD>(send_size), (LPDWORD)&bytessent, 0, NULL, NULL); + DWORD bytessent; + c = WSASend(sock_, wsabuf.data(), static_cast<DWORD>(send_size), (LPDWORD)&bytessent, 0, NULL, NULL); #else - int c = ftl::net::internal::writev(sock_, send_buf_.vector(), (int)send_buf_.vector_size()); + c = ftl::net::internal::writev(sock_, send_buf_.vector(), (int)send_buf_.vector_size()); #endif + } send_buf_.clear();