|
|
| 328 |
return -1; |
328 |
return -1; |
| 329 |
} |
329 |
} |
| 330 |
|
330 |
|
| 331 |
bool txEmpty = m_txBuffer.empty(); |
331 |
uint32_t sent = p->GetSize (); |
| 332 |
if (m_state == ESTABLISHED) |
332 |
if (m_state == ESTABLISHED) |
| 333 |
{ |
333 |
{ |
| 334 |
if (txEmpty) |
334 |
m_txBuffer.push(p); |
| 335 |
{ |
335 |
m_txBufferSize += sent; |
| 336 |
m_txBuffer.push(p); |
336 |
SendPendingData(); |
| 337 |
m_txBufferSize += p->GetSize (); |
|
|
| 338 |
} |
| 339 |
if (!SendPendingData()) |
| 340 |
{ |
| 341 |
if (m_errno == ERROR_AGAIN) |
| 342 |
{ |
| 343 |
return txEmpty ? p->GetSize () : -1; |
| 344 |
} |
| 345 |
if (txEmpty) |
| 346 |
{ |
| 347 |
m_txBuffer.pop (); |
| 348 |
m_txBufferSize = 0; |
| 349 |
} |
| 350 |
return -1; |
| 351 |
} |
| 352 |
} |
337 |
} |
| 353 |
else |
338 |
else |
| 354 |
{ // SYN_SET -- Queue Data |
339 |
{ // SYN_SET -- Queue Data |
| 355 |
m_txBuffer.push(p); |
340 |
m_txBuffer.push(p); |
| 356 |
m_txBufferSize += p->GetSize (); |
341 |
m_txBufferSize += sent; |
| 357 |
} |
342 |
} |
| 358 |
return p->GetSize (); |
343 |
return sent; |
| 359 |
} |
344 |
} |
| 360 |
else |
345 |
else |
| 361 |
{ |
346 |
{ |
|
|
| 434 |
NS_LOG_FUNCTION_NOARGS (); |
419 |
NS_LOG_FUNCTION_NOARGS (); |
| 435 |
if (m_deliveryQueue.empty() ) |
420 |
if (m_deliveryQueue.empty() ) |
| 436 |
{ |
421 |
{ |
|
|
422 |
m_errno = ERROR_AGAIN; |
| 437 |
return 0; |
423 |
return 0; |
| 438 |
} |
424 |
} |
| 439 |
Ptr<Packet> p = m_deliveryQueue.front (); |
425 |
Ptr<Packet> p = m_deliveryQueue.front (); |
|
|
| 444 |
} |
430 |
} |
| 445 |
else |
431 |
else |
| 446 |
{ |
432 |
{ |
|
|
433 |
m_errno = ERROR_AGAIN; |
| 447 |
p = 0; |
434 |
p = 0; |
| 448 |
} |
435 |
} |
| 449 |
return p; |
436 |
return p; |
|
|
| 627 |
size_t size, written = 0; |
614 |
size_t size, written = 0; |
| 628 |
|
615 |
|
| 629 |
do { |
616 |
do { |
|
|
617 |
NS_ASSERT (!m_txBuffer.empty ()); |
| 630 |
Ptr<Packet> &p = m_txBuffer.front (); |
618 |
Ptr<Packet> &p = m_txBuffer.front (); |
| 631 |
size = p->GetSize (); |
619 |
size = p->GetSize (); |
| 632 |
NS_ASSERT (size > 0); |
620 |
NS_ASSERT (size > 0); |
|
|
| 635 |
ret = m_nscTcpSocket->send_data((const char *)p->PeekData (), size); |
623 |
ret = m_nscTcpSocket->send_data((const char *)p->PeekData (), size); |
| 636 |
if (ret <= 0) |
624 |
if (ret <= 0) |
| 637 |
{ |
625 |
{ |
| 638 |
m_errno = GetNativeNs3Errno(ret); |
|
|
| 639 |
if (m_errno != ERROR_AGAIN) |
| 640 |
{ |
| 641 |
NS_LOG_WARN ("Error (" << ret << ") " << |
| 642 |
"during send_data, ns-3 errno set to" << m_errno); |
| 643 |
} |
| 644 |
break; |
626 |
break; |
| 645 |
} |
627 |
} |
| 646 |
written += ret; |
628 |
written += ret; |