看代码,4.11版本。当多个cudt共用同个复用器时,发送和接收的buffer也是共用的,即cudt的m_pSndQueue相同。 见CUDTUnited::updateMux() if ((s->m_pUDT->m_bReuseAddr) && (NULL != addr)) { int port = (AF_INET == s->m_pUDT->m_iIPversion) ? ntohs(((sockaddr_in)addr)->sin_port) : ntohs(((sockaddr_in6)addr)->sin6_port);
// find a reusable address for (map<int, CMultiplexer>::iterator i = m_mMultiplexer.begin(); i != m_mMultiplexer.end(); ++ i) { if ((i->second.m_iIPversion == s->m_pUDT->m_iIPversion) && (i->second.m_iMSS == s->m_pUDT->m_iMSS) && i->second.m_bReusable) { if (i->second.m_iPort == port) { // reuse the existing multiplexer ++ i->second.m_iRefCount; s->m_pUDT->m_pSndQueue = i->second.m_pSndQueue; s->m_pUDT->m_pRcvQueue = i->second.m_pRcvQueue; s->m_iMuxID = i->second.m_iID; return; } } }
}
有个疑问. 在发送线程CSndQueue::worker()中,是针对cudt进行包封装的(CUDT::packData())。取数据调用m_pSndBuffer->readData()。 从m_pSndBuffer取出来的包不一定是属于当前cudt的包吧?但这时候使用的是cudt的拥塞窗口。
简洁一点就是当多个cutd共用同个复用器时,发送线程在处理某个cudt的发送时发送了另外cudt的包了。
<BODY>
我最喜欢淘东西了,最近运气好,前几天看到这个活动,拍了两双,没想到发过来去专柜检验确实是正品~赚了~还有情侣款!http://dfhtdh.gxsl.net
This is an automatic reply, confirming that your e-mail was received.Thank you
Log in to post a comment.
看代码,4.11版本。当多个cudt共用同个复用器时,发送和接收的buffer也是共用的,即cudt的m_pSndQueue相同。
见CUDTUnited::updateMux()
if ((s->m_pUDT->m_bReuseAddr) && (NULL != addr))
{
int port = (AF_INET == s->m_pUDT->m_iIPversion) ? ntohs(((sockaddr_in)addr)->sin_port) : ntohs(((sockaddr_in6)addr)->sin6_port);
}
有个疑问.
在发送线程CSndQueue::worker()中,是针对cudt进行包封装的(CUDT::packData())。取数据调用m_pSndBuffer->readData()。
从m_pSndBuffer取出来的包不一定是属于当前cudt的包吧?但这时候使用的是cudt的拥塞窗口。
简洁一点就是当多个cutd共用同个复用器时,发送线程在处理某个cudt的发送时发送了另外cudt的包了。
<BODY>
</body>
</html>
<BODY>
</body>
</html>
<BODY>
</body>
</html>