08-10-2009
Socket++ library problem.
Hi,
My name is Daniel and I'm spanish, so I'm sorry if you can't undertand something becouse of my low-level english.
Something stranger is happening to me with socket++ library and I don't know how to work on it.
I has a library called commands.so and the sslclient is and object of that library. sslclient creates an iosockinet object. Just when it creates that object, the program exits with a Segmentation fault error.
I compiled socket++ and my program with debug flag and all I see (and all gdb tells me) is that program recives a SIGSERV when it calls iosockinet constructor.
If I do the same on a separated file (main.cpp) that sslclient does, it works. But the most heavy is that my program runs under valgrind. I'm not an expert valgrind user so I don't know if it's normal (I don't think so).
I'm paranoid about the cause... I think it could happend becouse of the command.so library. If it heps, the iosockinet is created after sslclient object is created.
I'm working under gentoo and I tried the same come in 2 completly different gentoo with the same result, so I figure it's my fault. Once compute information is:
Linux servidor-dissmar 2.6.28-gentoo-r5 #1 SMP Tue Jul 21 12:01:33 CEST 2009 i686 Intel(R) Xeon(R) CPU E5310 @ 1.60GHz GenuineIntel GNU/Linux
g++ (GCC) 4.1.2 (Gentoo 4.1.2 p1.0.2)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
gdb output:
Breakpoint 1, sslclient::execute (this=0x805ec90) at network/sslclient.cpp:68
68 iosockinet sock;
(gdb) s
Program received signal SIGSEGV, Segmentation fault.
0xb7bca40e in ?? () from /lib/libc.so.6
valgrid output (just the point before and after, without any errors):
Proceed command execution...
connect...
sslclient.cpp:
#include <iostream>
#include "sslclient.h"
using namespace std;
//sockbuf *sslclient::sock;
extern "C" command *r_done() {
cout << "No message concordances... null command will be returned." << endl;
return NULL;
}
extern "C" command *sslclient() {
/*cout << "On extern method from sslclient.cpp. Setting observers. Wrong point which would do invoker subtype (like player_control or, in this case, network_control)." << endl;
sslclient::sslclient *client = new sslclient::sslclient;
observer o;
client->add_observer(o);
return client;*/
cout << "Creating sslclient command..." << endl;
return new sslclient::sslclient;
}
sslclient::sslclient() {
/*if (sock == NULL) {
int s = socket(AF_INET, SOCK_STREAM,0);
cout << "created socket: " << s << endl;
sock = new sockbuf(s);
//sock = new sockbuf((const sockbuf::sockdesc)sockbuf::sockdesc(socket(AF_INET, SOCK_STREAM,0)));
sockbuf::sockdesc sd(fd);
sock = new sockbuf(sd);
}*/
// sockbuf::sockdesc sd(socket(AF_INET, SOCK_STREAM,0));
// sock = new sockbuf(sd);
}
void sslclient::send_data(iosockinet *sock) {
cout << "send(): sending command content " << command << endl;
while(sock->write(command, strlen(command)) == 0)
cout << "Communication problem... retrying to send command \"" << command << "\"." << endl;
cout << "send(): data sent." << endl;
}
int sslclient::recive_data(iosockinet *sock) {
cout << "recv(): reciveing data content." << endl;
if (data != NULL)
delete [] data;
data = new char[10000];
//int len = sock.read(data, 10000);
int len;sock->read(data, 10000);
if (data != NULL && strcmp(data, "") != 0) {
char *buff = new char[len+2];
strcpy(buff,"r_");
strcpy((char *)buff+2, data);
//delete [] data; //Si el matem peta... pero qui el peta?
data = buff;
buff = NULL;
new_data = true;
cout << "recv(): stored data content " << data << endl;
}
}
void sslclient::execute() {
iosockinet sock; //here <--------------------------------------------------------------------------------
cout << "connect..." << endl;
sock->connect("dissmar.es",4444);
while (sock->is_writeready(-1,0) == 0)
cout << "Internet connection lost or server not respondig. Check hardware and software connections and if problem persists call your admin." << endl;
cout << "Connection stabilished." << endl;
cout << "Starting data transmission..." << endl;
send_data(&sock);
recive_data(&sock);
cout << "Data transmission finished..." << endl;
cout << "disconnect..." << endl;
if (new_data) {
cout << "Notifying command observers..." << endl;
notify_observers();
new_data = false;
}
}
sslclient::~sslclient() {
// delete sock;
}
Thank you in advance,
Daniel.
Edit: code add, sorry. Includes are in sslclient.h.
Last edited by lock.cda; 08-10-2009 at 05:01 PM..
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