View | Details | Raw Unified | Return to bug 386
Collapse All | Expand All

(-)a/src/internet-stack/nsc-tcp-socket-impl.cc (-27 / +9 lines)
 Lines 328-361    Link Here 
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
  {
 Lines 434-439    Link Here 
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 ();
 Lines 444-449    Link Here 
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;
 Lines 627-632    Link Here 
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);
 Lines 635-646    Link Here 
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;

Return to bug 386