Package: libcommoncpp2-dev
Version: 1.7.3-1
Severity: normal

DESCRIPTION

I just disovered, that the class TCPStream does not work as expected.
When you do a "send -- receive -- send" , only one package is sent. The second 
send is not performed.

When you do a "send -- send" , two packages are sent, as expected.

TESTCASE

Attached are two testcases: test.cpp and test_noreceive.cpp
Compile it with e.g g++ test_noreceive.cpp `ccgnu2-config --flags --libs 
--includes`

The first does the send -- receive -- send, the second just has commented out 
the receive line.

To test it, use netcat -l -p 12345 

SAMPLE OUTPUT

t...@mordor:~/workspace/test$ g++ test.cpp `ccgnu2-config --flags --libs 
--includes --extlibs `
t...@mordor:~/workspace/test$ netcat -l -p 12345 &
[1] 2124
t...@mordor:~/workspace/test$ ./a.out 
{FB;01;66|64:TYP;SWV;BDN;PAC;KHR;PIN;KT0;DDY;KYR;KMT;DMT;KT0;RPL;UDC;IDC;IL1;UL1;TKK;TMI;THR;SYS|1AAD}
t...@mordor:~/workspace/test$ g++ test_noreceive.cpp `ccgnu2-config --flags 
--libs --includes --extlibs `
[1]+  Done                    netcat -l -p 12345
t...@mordor:~/workspace/test$ netcat -l -p 12345 &
[1] 2151
t...@mordor:~/workspace/test$ ./a.out 
{FB;01;66|64:TYP;SWV;BDN;PAC;KHR;PIN;KT0;DDY;KYR;KMT;DMT;KT0;RPL;UDC;IDC;IL1;UL1;TKK;TMI;THR;SYS|1AAD}
{FB;01;66|64:TYP;SWV;BDN;PAC;KHR;PIN;KT0;DDY;KYR;KMT;DMT;KT0;RPL;UDC;IDC;IL1;UL1;TKK;TMI;THR;SYS|1AAD}
[1]+  Done                    netcat -l -p 12345
t...@mordor:~/workspace/test$ 

-- System Information:
Debian Release: squeeze/sid
  APT prefers unstable
  APT policy: (500, 'unstable'), (1, 'experimental')
Architecture: i386 (i686)

Kernel: Linux 2.6.29-2-686 (SMP w/2 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages libcommoncpp2-dev depends on:
ii  libccgnu2-1.7-0        1.7.3-1           A GNU package for creating portabl
ii  libgcrypt11-dev [libgc 1.4.4-2           LGPL Crypto library - development 
ii  libgnutls-dev          2.6.6-1           the GNU TLS library - development 
ii  pkg-config             0.22-1            manage compile and link flags for 
ii  zlib1g-dev             1:1.2.3.3.dfsg-13 compression library - development

libcommoncpp2-dev recommends no packages.

Versions of packages libcommoncpp2-dev suggests:
ii  libcommoncpp2-doc             1.7.3-1    Documentation files for Common C++

-- no debconf information
#include <string>
#include <iostream>
#include <cc++/socket.h>
#include <cc++/address.h>

using namespace std;

int main()
{
        try {
                // Testing TCP resending
                string s;
                string r;
                s = "{FB;01;66|64:TYP;SWV;BDN;PAC;KHR;PIN;KT0;DDY;KYR;KMT;DMT;KT0;RPL;UDC;IDC;IL1;UL1;TKK;TMI;THR;SYS|1AAD}\n";

                ost::IPV4Host host("127.0.0.1");

                ost::TCPStream stream(host, 12345, 536, true, 3000);

                // Send
                stream << s;
                stream.sync();
                // SLEEP
                sleep(3);
                // if this line is commented out,
                // two pacakges are sent as expected.
                // however, if its commented in, only one packet is *sent*
                // receive
                try {
                  stream >> r;
                }
                catch (...)
                {

                }

                sleep(3);
                // send again
                stream << s;
                stream.sync();

                sleep(3);

        } catch (...) {
                cerr << "TCP/IP Connection Error" << endl;
                return false;
        }

        return 0;
}

#include <string>
#include <iostream>
#include <cc++/socket.h>
#include <cc++/address.h>

using namespace std;

int main()
{
        try {
                // Testing TCP resending
                string s;
                string r;
                s = "{FB;01;66|64:TYP;SWV;BDN;PAC;KHR;PIN;KT0;DDY;KYR;KMT;DMT;KT0;RPL;UDC;IDC;IL1;UL1;TKK;TMI;THR;SYS|1AAD}\n";

                ost::IPV4Host host("127.0.0.1");

                ost::TCPStream stream(host, 12345, 536, true, 3000);

                // Send
                stream << s;
                stream.sync();
                // SLEEP
                sleep(3);
                // if this line is commented out,
                // two pacakges are sent as expected.
                // however, if its commented in, only one packet is *sent*
                // receive
                try {
                  //stream >> r;
                }
                catch (...)
                {

                }

                sleep(3);
                // send again
                stream << s;
                stream.sync();

                sleep(3);

        } catch (...) {
                cerr << "TCP/IP Connection Error" << endl;
                return false;
        }

        return 0;
}

Reply via email to