unerklaerlicher doppelter aufruf einer funktion
-
hola leute
hab mir eine socketklasse fuer einen tcp-server geschrieben.
fuer benachrichtigungen verschiedenster art hab ich bcb-events hinzugefuegt.
nun hab ich das problem das meine funktion 'on_close' doppelt aufgerufen wird.
mal bissl code:class Socket { public: Socket(void); Socket(const Socket &s); virtual ~Socket(void); SOCKET GetSocket(void) const; operator SOCKET(void) const; virtual void CloseSocket(void) { if(socket) { ::closesocket(socket); socket = 0; } } protected: SOCKET socket; }; template<int family, int socktype, int protocol> class ServerSocket : public Socket { public: ServerSocket(void) : port(0) { } ServerSocket(const ServerSocket &ss) : Socket(ss), port(ss.port) { } virtual ~ServerSocket(void) { } bool BindSocket(unsigned short t_port); virtual void CloseSocket(void) { Socket::CloseSocket(); port = 0; } bool IsActive(void) const; unsigned short GetPort(void) const; }; class TcpServer : public ServerSocket<AF_INET, SOCK_STREAM, IPPROTO_TCP> { public: typedef void (__closure *OnListen)(SOCKET socket); typedef void (__closure *OnAccept)(SOCKET socket); typedef void (__closure *OnClose)(SOCKET socket); typedef void (__closure *OnConnected)(TcpServer *server, SOCKET client); typedef void (__closure *OnError)(TcpServer *server, const char *str); typedef void (__closure *OnStatus)(TcpServer *server, const char *str); TcpServer(void); TcpServer(const TcpServer &ts); virtual ~TcpServer(void); bool Listen(void); virtual void CloseSocket(void); OnListen on_listen; OnAccept on_accept; OnClose on_close; OnConnected on_connected; OnError on_error; OnStatus on_status; }; // cpp-file void TcpServer::CloseSocket(void) { if(on_close) on_close(socket); ServerSocket<AF_INET, SOCK_STREAM, IPPROTO_TCP>::CloseSocket(); //(1) }wenn ich nun CloseSocket aufrufe, wird on_close 2x aufgerufen.
wenn ich zeile (1) wegtue wird on_close nur noch einmal aufgerufen.
sieht da jemand den fehler ?Meep Meep
-
Hast du mal im Debugger verfolgt, von wo aus die Funktion aufgerufen wird? (Call-Stacks sind da eine durchaus nützliche Erfindung)
-
re
fehler gefunden. hab an ner anderen stelle anstatt den clientsocket, den server socket nochmal geschlossen.Meep Meep