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
FSOCKOPEN(3)								 1							      FSOCKOPEN(3)

fsockopen - Open Internet or Unix domain socket connection

SYNOPSIS
resource fsockopen (string $hostname, [int $port = -1], [int &$errno], [string &$errstr], [float $timeout = ini_get("default_socket_timeout")]) DESCRIPTION
Initiates a socket connection to the resource specified by $hostname. PHP supports targets in the Internet and Unix domains as described in "List of Supported Socket Transports". A list of supported trans- ports can also be retrieved using stream_get_transports(3). The socket will by default be opened in blocking mode. You can switch it to non-blocking mode by using stream_set_blocking(3). The function stream_socket_client(3) is similar but provides a richer set of options, including non-blocking connection and the ability to provide a stream context. PARAMETERS
o $hostname - If OpenSSL support is installed, you may prefix the $hostname with either ssl:// or tls:// to use an SSL or TLS client connec- tion over TCP/IP to connect to the remote host. o $port - The port number. This can be omitted and skipped with -1 for transports that do not use ports, such as unix://. o $errno - If provided, holds the system level error number that occurred in the system-level connect() call. If the value returned in $errno is 0 and the function returned FALSE, it is an indication that the error occurred before the connect() call. This is most likely due to a problem initializing the socket. o $errstr - The error message as a string. o $timeout - The connection timeout, in seconds. Note If you need to set a timeout for reading/writing data over the socket, use stream_set_timeout(3), as the $timeout parameter to fsockopen(3) only applies while connecting the socket. RETURN VALUES
fsockopen(3) returns a file pointer which may be used together with the other file functions (such as fgets(3), fgetss(3), fwrite(3), fclose(3), and feof(3)). If the call fails, it will return FALSE ERRORS
/EXCEPTIONS Throws E_WARNING if $hostname is not a valid domain. EXAMPLES
Example #1 fsockopen(3) Example <?php $fp = fsockopen("www.example.com", 80, $errno, $errstr, 30); if (!$fp) { echo "$errstr ($errno)<br /> "; } else { $out = "GET / HTTP/1.1 "; $out .= "Host: www.example.com "; $out .= "Connection: Close "; fwrite($fp, $out); while (!feof($fp)) { echo fgets($fp, 128); } fclose($fp); } ?> Example #2 Using UDP connection The example below shows how to retrieve the day and time from the UDP service "daytime" (port 13) in your own machine. <?php $fp = fsockopen("udp://127.0.0.1", 13, $errno, $errstr); if (!$fp) { echo "ERROR: $errno - $errstr<br /> "; } else { fwrite($fp, " "); echo fread($fp, 26); fclose($fp); } ?> NOTES
Note Depending on the environment, the Unix domain or the optional connect timeout may not be available. Warning UDP sockets will sometimes appear to have opened without an error, even if the remote host is unreachable. The error will only become apparent when you read or write data to/from the socket. The reason for this is because UDP is a "connectionless" protocol, which means that the operating system does not try to establish a link for the socket until it actually needs to send or receive data. Note When specifying a numerical IPv6 address (e.g. fe80::1), you must enclose the IP in square brackets--for example, tcp://[fe80::1]:80. SEE ALSO
pfsockopen(3), stream_socket_client(3), stream_set_blocking(3), stream_set_timeout(3), fgets(3), fgetss(3), fwrite(3), fclose(3), feof(3), socket_connect(3), The Curl extension. PHP Documentation Group FSOCKOPEN(3)
All times are GMT -4. The time now is 10:51 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy