bug-commoncpp
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: posix TCPStream, Thread


From: David Sugar
Subject: Re: posix TCPStream, Thread
Date: Wed, 03 Oct 2001 07:37:55 -0400
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.3) Gecko/20010802

This might be an effect of the stream buffering system, but I will have to think more about this. The second issue is a strange one. Normally if one creates a thread that terminates rather than is joined by being deleted, then, in theory it probably should delete itself. If it deletes itself, this issue would not happen since there would be no object to test :). In fact, if it does delete itself in it's Final method, then this would cause a segfault...

Attila Dani wrote:

Hi,

I tried the posix version of the CommonC++ under
a debian linux system (potato), and it seems I
have found two bugs (or maybe features just I used
it on a wrong way).

1. If I recive a sentence via a TCPStream and send
  back an answer without reading the whole input then
  I lose the rest of it. Is it a correct behavior?
  I modified the tcp.cpp demo file. After you compile,
run and open a telnet session, it should send back your sentence word by word. It does not, just the first
  word! /I attached the code, try: telnet localhost 18070/

2. Thread class: If a thread finishes its task normaly (
  goes throught Initial, Run, Final) and we still have
  the thread object then the isRunning() method returns
  true. This is not right because the thread has already
  stopped. The isRunning() works by the private _tid
variable of the Thread class. Maybe the next simple modification would help in the execHandler() function:
  ..
  ..
  th->setCancel(THREAD_CANCEL_DISABLED);
   if(!pthread_detach(th->_tid) && th->_parent)
       th->_parent->Notify(th);
   th->Final();
   // !
   th->_tid = 0; //just setting to 0 the _tid
   // !
   pthread_exit(NULL);
 }

Sorry, if I did not understand something correctly.
Regards,
Attila Dani.





------------------------------------------------------------------------

// Copyright (C) 1999-2001 Open Source Telecom Corporation.
// // This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
// // This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
// // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // As a special exception to the GNU General Public License, permission is // granted for additional uses of the text contained in its release // of Common C++. // // The exception is that, if you link the Common C++ library with other
// files to produce an executable, this does not by itself cause the
// resulting executable to be covered by the GNU General Public License.
// Your use of that executable is in no way restricted on account of
// linking the Common C++ library code into it.
//
// This exception does not however invalidate any other reasons why
// the executable file might be covered by the GNU General Public License.
//
// This exception applies only to the code released under the // name Common C++. If you copy code from other releases into a copy of
// Common C++, as the General Public License permits, the exception does
// not apply to the code that you add in this way.  To avoid misleading
// anyone as to the status of such modified files, you must delete
// this exception notice from them.
// // If you write modifications of your own for Common C++, it is your choice
// whether to permit this exception to apply to your modifications.
// If you do not wish that, delete this exception notice.
#include <config.h>
#include <macros.h>
#include <thread.h>
#include <socket.h>
#include <iostream>
#include <cstdlib>
#include <string>

using namespace std;


int main(int argc, char *argv[])
{
        try {
                TCPSocket So("localhost", 18070);
                So.isPendingConnection();
                TCPStream Stream(So);
                string input;
                while(Stream.isPending(SOCKET_PENDING_INPUT)) {
                        Stream >> input;
                        Stream << "I got the word: " << input << endl;
                        //Stream.sync();
                }
        }
        catch(Socket *socket)
        {
                tpport_t port;
                InetAddress saddr = (InetAddress)socket->getPeer(&port);
cerr << "socket error " << saddr << ":" << port << endl; cout << "error number " << socket->getErrorNumber() << endl;
                if(socket->getErrorNumber() == SOCKET_RESOURCE_FAILURE)
                {
                        cerr << "bind failed; no resources" << endl;
                        exit(-1);
                }
                if(socket->getErrorNumber() == SOCKET_BINDING_FAILED)
                {
                        cerr << "bind failed; port busy" << endl;
                        exit(-1);
                }
        }
        cout << "timeout after 30 seconds inactivity, exiting" << endl;
   return 0;
}

tcp.cpp

Content-Type:

text/x-c++
Content-Encoding:

7bit







reply via email to

[Prev in Thread] Current Thread [Next in Thread]