|
|
| 498 |
m_errno = ERROR_MSGSIZE; |
498 |
m_errno = ERROR_MSGSIZE; |
| 499 |
return -1; |
499 |
return -1; |
| 500 |
} |
500 |
} |
|
|
501 |
if (m_shutdownSend) |
| 502 |
{ |
| 503 |
m_errno = ERROR_SHUTDOWN; |
| 504 |
return -1; |
| 505 |
} |
| 501 |
// Submit the data to lower layers |
506 |
// Submit the data to lower layers |
| 502 |
NS_LOG_LOGIC ("txBufSize=" << m_txBuffer.Size () << " state " << TcpStateName[m_state]); |
507 |
NS_LOG_LOGIC ("txBufSize=" << m_txBuffer.Size () << " state " << TcpStateName[m_state]); |
| 503 |
if (m_state == ESTABLISHED || m_state == CLOSE_WAIT) |
508 |
if (m_state == ESTABLISHED || m_state == CLOSE_WAIT) |
|
|
| 1853 |
" highestRxAck " << m_txBuffer.HeadSequence () << |
1858 |
" highestRxAck " << m_txBuffer.HeadSequence () << |
| 1854 |
" pd->Size " << m_txBuffer.Size () << |
1859 |
" pd->Size " << m_txBuffer.Size () << |
| 1855 |
" pd->SFS " << m_txBuffer.SizeFromSequence (m_nextTxSequence)); |
1860 |
" pd->SFS " << m_txBuffer.SizeFromSequence (m_nextTxSequence)); |
| 1856 |
// Quit if send disallowed |
|
|
| 1857 |
if (m_shutdownSend) |
| 1858 |
{ |
| 1859 |
m_errno = ERROR_SHUTDOWN; |
| 1860 |
return false; |
| 1861 |
} |
| 1862 |
// Stop sending if we need to wait for a larger Tx window (prevent silly window syndrome) |
1861 |
// Stop sending if we need to wait for a larger Tx window (prevent silly window syndrome) |
| 1863 |
if (w < m_segmentSize && m_txBuffer.SizeFromSequence (m_nextTxSequence) > w) |
1862 |
if (w < m_segmentSize && m_txBuffer.SizeFromSequence (m_nextTxSequence) > w) |
| 1864 |
{ |
1863 |
{ |