and again, socket() related problem...


 
Thread Tools Search this Thread
Top Forums Programming and again, socket() related problem...
# 1  
Old 01-23-2009
and again, socket() related problem...

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 Smilie

Code:
bool    
SomeFunc(std::string rHost, unsigned int rPort, int rTimeout)
{
        struct timeval  timeout;
        fd_set          set;
        int             flags;
                
        timeout.tv_sec  = rTimeout;
        timeout.tv_usec = 0;

        MySocket                sock;

        sock.SetHostname(rHost);
        sock.SetPort(rPort);

        sock.socket();

        try {
                flags = fcntl(sock.GetSocket(), F_GETFL);
                if (flags == -1) throw 1;
                flags |= O_NONBLOCK;
                fcntl(sock.GetSocket(), F_SETFL, flags);

                FD_ZERO(&set);
                FD_SET(sock.GetSocket(), &set);
                flags = select(sock.GetSocket() + 1, &set, &set, &set, &timeout);
/*
                int maxfd = max(maxfd, sock.GetSocket());
                select(maxfd + 1, &set, &set, &set, &timeout);
                FD_ISSET(sock.GetSocket(), &set);
*/
                if (flags == -1) throw 2;

                if (!sock.connect()) return false;

                flags = fcntl(sock.GetSocket(), F_GETFL);
                flags &= ~O_NONBLOCK;
                fcntl(sock.GetSocket(), F_SETFL, flags);
        }
        catch (int n) {
                log.log("can't set timeout, using system defaults (exp #" +
                itos(n) + ", errno #" + itos(errno) + ")");

                if (!sock.connect()) return false;
        }

        sock.disconnect();

        return true;
}

MySocket is a C++ class, it's just a wrapper to such functions, like socket(), getservbyname(), etc.

I know, it is possible to use alarm() and such, but I don't want to use signals, because application is multithreaded. I've tried to implement timeout by using poll(), but I have no success with it.

I know, the solution is simple, but I can't find it Smilie

Thanks for your helping.
# 2  
Old 01-24-2009
Problem solved. Here's the solution: Socket: Select() howto - System iNetwork Forums
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Solaris

Problem to understand METADEVICE and related commands

Hi everyone, I'm new with solaris administration. I have just discovered the notion of METADEVICE and I really don't understand it. Can any one please explain it to me or give me useful link ? I also want to know more about these commandes: metainit metadb metaattach Thank you ... (1 Reply)
Discussion started by: adilyos
1 Replies

2. Shell Programming and Scripting

Problem related to shell script

I am new in shell script.I want to write a shell script to read username and password from file and compare it with the username and password which is entered by the GUI application. (1 Reply)
Discussion started by: shubhig15
1 Replies

3. Programming

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... (4 Replies)
Discussion started by: lock.cda
4 Replies

4. Programming

Problem with Socket program..

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

5. UNIX for Advanced & Expert Users

connect problem for sctp socket (ipv6 socket) - Runtime fail Invalid Arguments

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

6. Solaris

Hardware Raid related problem

Dear All I would Like to know that if suppose c1t0d0 is of 72 gb hard disk and system boot from this hard disk and c1t1d0 is of 147gb hard disk. Can we implement hardware raid (Mirror) between these two hard disks of different capacity if raid crontroller is present in the server Kind regards (4 Replies)
Discussion started by: girish.batra
4 Replies

7. UNIX for Dummies Questions & Answers

Problem related to awk

Hi, can anyone explain me the following command. awk '{y=x "\n" $0; x=$0};END{print y}' file_name Regards Rochit (2 Replies)
Discussion started by: rochitsharma
2 Replies

8. Programming

Problem Connecting to Socket

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

9. Shell Programming and Scripting

Crontab Related problem

Hi Following is the script which runs from command prompt....... but when I schedule it in crontab , its showing some error ( mentioned after this piece of code) #!/bin/ksh PATH=/usr/bin:/usr/ucb:/etc:. export PATH JAVA_HOME=/opt/bea/jdk131; export JAVA_HOME ANT_HOME=/opt/bea/ant... (1 Reply)
Discussion started by: pankajkrmishra
1 Replies

10. Programming

Socket Problem

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
Login or Register to Ask a Question