INT_PTR nCount, nAvalLength, nBytesWriten; CDataPacket **pPacketList, *pPacket; size_t nTotalSent = 0; //提交追加到发送队列中的数据包 m_SendingPacketList.flush(); //循环发送数据包 pPacketList = m_SendingPacketList; nCount = m_SendingPacketList.count(); for (; m_nSendingPacketIdx<nCount; ++m_nSendingPacketIdx) { pPacket = pPacketList[m_nSendingPacketIdx]; nAvalLength = pPacket->getAvaliableLength(); if (nAvalLength > 0) { //发送数据 nBytesWriten = socket.send(pPacket->getOffsetPtr(), (INT)nAvalLength); if ( nBytesWriten <= 0 ) break; } else nBytesWriten = 0; nTotalSent += nBytesWriten; //该数据包中的数据是否已经发完 if (nBytesWriten >= nAvalLength) { //清空数据包的数据长度 pPacket->setLength(0); } else { //调整偏移到下次继续发送的位置 pPacket->adjustOffset(nBytesWriten); break; } } //如果发送队列中的数据已经全部发送完毕,则将数据包全部移动到空闲数据包列表中 if ( m_nSendingPacketIdx >= nCount ) { m_nSendingPacketIdx = 0; m_FreeSendPackList.lock(); m_FreeSendPackList.addArray(m_SendingPacketList, m_SendingPacketList.count()); m_SendingPacketList.trunc(0); m_FreeSendPackList.unlock(); } return nTotalSent; 帮忙看看为什么send会返回10035错误
时间: 2024-04-22 16:22:37 浏览: 55
C++ unique_ptr weak_ptr shared_ptr auto_ptr智能指针.doc
5星 · 资源好评率100%
10035错误是WSAEWOULDBLOCK错误,表示在非阻塞套接字上操作会阻塞或导致操作无法立即完成。这通常是由于套接字缓冲区已满或系统的发送队列已满导致的。
在上述代码中,发送数据时,如果发送缓冲区已满,send函数可能会返回WSAEWOULDBLOCK错误。这时可以尝试等待一段时间,然后再次调用send函数发送数据。
另外,还可以通过设置套接字为非阻塞模式,并使用select函数等待可写事件,避免在发送数据时阻塞。
需要注意的是,当出现WSAEWOULDBLOCK错误时,不应该立即关闭套接字,而应该等待一段时间,让系统有时间将数据发送出去。否则,可能会导致数据丢失或重复发送。
阅读全文