Sponsored Content
Top Forums Programming and again, socket() related problem... Post 302279780 by sggkxv on Friday 23rd of January 2009 05:15:30 PM
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.
 

10 More Discussions You Might Find Interesting

1. 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

2. 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

3. 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

4. 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

5. 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

6. 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

7. 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

8. 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

9. 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

10. 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
SOCKET_BIND(3)								 1							    SOCKET_BIND(3)

socket_bind - Binds a name to a socket

SYNOPSIS
bool socket_bind (resource $socket, string $address, [int $port]) DESCRIPTION
Binds the name given in $address to the socket described by $socket. This has to be done before a connection is be established using socket_connect(3) or socket_listen(3). PARAMETERS
o $socket - A valid socket resource created with socket_create(3). o $address - If the socket is of the AF_INET family, the $address is an IP in dotted-quad notation (e.g. 127.0.0.1). If the socket is of the AF_UNIX family, the $address is the path of a Unix-domain socket (e.g. /tmp/my.sock). o $port (Optional) - The $port parameter is only used when binding an AF_INET socket, and designates the port on which to listen for connections. RETURN VALUES
Returns TRUE on success or FALSE on failure. The error code can be retrieved with socket_last_error(3). This code may be passed to socket_strerror(3) to get a textual explanation of the error. EXAMPLES
Example #1 Using socket_bind(3) to set the source address <?php // Create a new socket $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); // An example list of IP addresses owned by the computer $sourceips['kevin'] = '127.0.0.1'; $sourceips['madcoder'] = '127.0.0.2'; // Bind the source address socket_bind($sock, $sourceips['madcoder']); // Connect to destination address socket_connect($sock, '127.0.0.1', 80); // Write $request = 'GET / HTTP/1.1' . " " . 'Host: example.com' . " "; socket_write($sock, $request); // Close socket_close($sock); ?> NOTES
Note This function must be used on the socket before socket_connect(3). Note Windows 9x/ME compatibility note: socket_last_error(3) may return an invalid error code if trying to bind the socket to a wrong address that does not belong to your machine. SEE ALSO
socket_connect(3), socket_listen(3), socket_create(3), socket_last_error(3), socket_strerror(3). PHP Documentation Group SOCKET_BIND(3)
All times are GMT -4. The time now is 07:26 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy