08-11-2009
Code posted.
The code is posted.
---------- Post updated at 04:04 PM ---------- Previous update was at 03:28 PM ----------
It's compiled with:
g++ -ggdb -fPIC -c network/sslclient.cpp -o network/sslclient.o
And linked to it's library with:
g++ -ggdb -ldl network/sslclient.o (some other objects) -fPIC -lsocket++ -shared -o ../libs/commands.so
---------- Post updated at 05:09 PM ---------- Previous update was at 04:04 PM ----------
Using valgrind without tool (--tool=none) I got a more specific error detail:
==20937==
==20937== Process terminating with default action of signal 11 (SIGSEGV)
==20937== Access not within mapped region at address 0x74736978
==20937== at 0x437A40E: (within /lib/libc-2.8.so)
==20937== by 0x437C73E: (within /lib/libc-2.8.so)
==20937== by 0x437E3EA: malloc (in /lib/libc-2.8.so)
==20937== by 0x42A96D8: operator new(unsigned int) (in /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/libstdc++.so.6.0.8)
==20937== by 0x42A980C: operator new[](unsigned int) (in /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/libstdc++.so.6.0.8)
==20937== by 0x4464C3A: sockbuf::sockbuf(int, sockbuf::type, int) (in /usr/lib/libsocket++.so.1.0.2)
==20937== by 0x4042199: network_control::invoke(char*) (network_control.cpp:58)
==20937== by 0x804E199: main (main.cpp:12)
It seems that when it creates an int (which would must be a copy of socket descriptor) it try to create the int in none process memory. I still can't find why.
Any help will be grateful.
---------- Post updated 08-11-09 at 06:26 AM ---------- Previous update was 08-10-09 at 05:09 PM ----------
Al warnings generated compiling with -Wall -Werror are corrected.
If more details are needed, that's how a sslclient is created and the method called:
main has an invoker_factory.
invoker_factory creates the invoker that will call the method.
the invoker calls to command_factory.
command_factory creates a command and returns it to invoker.
invoker calls the execute method from command and program segfaults.
Invoker and command are abstract classes. Subclasses are into a dynamic library (called invokers.so and commands.so respectively) and the objects instances are created by dlopen.
I tried giving more memory space at sockbuf objects and it didn't work (as I expected). I also tried it:
#include "network/sslclient.h"
int main() {
sslclient *s = new sslclient;
s->set_command("foo");
s->execute();
return 0;
};
And it works perfectly. And doing exactly the same into invokers code instead of main, it segfaults. Invokers and commands are created by a dynamic libs and that could be a possible cause. Any suggestions?
Thank you so much in advance.
---------- Post updated at 06:33 AM ---------- Previous update was at 06:26 AM ----------
That's the way that command_factory uses to create commands:
void *hndl = dlopen("../libs/commands.so", RTLD_NOW | RTLD_LOCAL | RTLD_LAZY);
if(hndl == NULL)
cout << "Library commands.so is missing." << endl;
command* (*create)() = (command* (*)())dlsym(hndl, method);
command * cmd = (command *)create();
And the same way is used by invoker_factory, but the library is ../libs/invokers.so.
Thank you again.
Last edited by lock.cda; 08-11-2009 at 04:09 AM..
10 More Discussions You Might Find Interesting
1. Programming
Hi all,
I have developed server/client application (using C) and tested it on the same machine .. but when I deploy them on different machines I get connection timeout.
Well .. server machine and client machine exists on different network segments, so there is a linux firewall box to route... (3 Replies)
Discussion started by: Agent007
3 Replies
2. Programming
Can anyone help? I'm trying to write a program which will write to a socket. I can get the server to run, but always get an error when I try to connect.
It gives me an error at the "connect" command.
It's probably a simple error, but I can't seem to find it.
#include <sys/socket.h>... (6 Replies)
Discussion started by: Stevhp
6 Replies
3. Programming
Hi,
I am trying to develop a simple program that uses Sockets. I have a windows machine and MUST use C++. I found out that I can use C's Socket (#include <sys/socket.h>) API calls, but this is only possible on a unix machine. So I installed Cygwin to imitate a unix environment on my windows... (4 Replies)
Discussion started by: wannabeTekkie
4 Replies
4. UNIX for Advanced & Expert Users
I am not able to receive the message on socket in the current process when its waiting for its child to exit.
code looks something like below
//in one thread of the current process
//thread 1
===============================================
int numBytes = read(sockid,buf,SIZE); //Now the... (2 Replies)
Discussion started by: swap007
2 Replies
5. Programming
Dear All,
I've searched many topics and googled many web-pages, but still I didn't found solution to this problem.
I want to set timeout for connect(). The thing is, that my code works only on BSD, on Linux (tested on SuSE box) it freezes at connect() call :(
bool
SomeFunc(std::string... (1 Reply)
Discussion started by: sggkxv
1 Replies
6. UNIX for Advanced & Expert Users
Hi,
I was porting ipv4 application to ipv6; i was done with TCP transports. Now i am facing problem with SCTp transport at runtime.
To test SCTP transport I am using following server and client socket programs. Server program runs fine, but client program fails giving Invalid Arguments for... (0 Replies)
Discussion started by: chandrutiptur
0 Replies
7. Programming
I wrote a program which will send a message to multiple clients(i.e, broadcasting) that are connected to a server.Once when the client receives a message from the server ,the client should read a file in the server and display it in the client.The client which responds (i.e, client wants all the... (3 Replies)
Discussion started by: vigneshinbox
3 Replies
8. Linux
Hello,
./configure script fails to configure libsf. Please check the following last few lines of configure script error.
checking for db1/db.h... no
checking for db.h... yes
checking for dbopen in -ldb1... no
configure: error: No libdb? No libsf.
But find command shows the following; ... (4 Replies)
Discussion started by: vectrum
4 Replies
9. IP Networking
Hi
My socket program is to communicate between the two systems connected with lan. Always i am getting an error saying bind value is -1 or not connected. ..If i run both the server and client programs in the same machine in two diff terminals they are working but they are not working between two... (3 Replies)
Discussion started by: Gurvareddy
3 Replies
10. AIX
Can somebody help me too identify full path to socket library on AIX? Cannot find anything
Thanks
for contribution (2 Replies)
Discussion started by: digioleg54
2 Replies