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
sctp_bindx(3SOCKET)					     Sockets Library Functions					       sctp_bindx(3SOCKET)

NAME
sctp_bindx - add or remove IP addresses to or from an SCTP socket SYNOPSIS
cc [ flag... ] file... -lsocket -lnsl -lsctp [ library... ] #include <sys/types.h> #include <sys/socket.h> #include <netinet/sctp.h> int sctp_bindx(int sock, void *addrs, int addrcnt, int flags); DESCRIPTION
The sctp_bindx() function adds or removes addresses to or from an SCTP socket. If sock is an Internet Protocol Version 4 (IPv4) socket, addrs should be an array of sockaddr_in structures containing IPv4 addresses. If sock is an Internet Protocol Version 6 (IPv6) socket, addrs should be an array of sockaddr_in6 structures containing IPv6 or IPv4-mapped IPv6 addresses. The addrcnt is the number of array ele- ments in addrs. The family of the address type is used with addrcnt to determine the size of the array. The flags parameter is a bitmask that indicates whether addresses are to be added or removed from a socket. The flags parameter is formed by bitwise OR of zero or more of the following flags: SCTP_BINDX_ADD_ADDR Indicates that addresses from addrs should be added to the SCTP socket. SCTP_BINDX_REM_ADDR Indicates that addresses from addrs should be removed from the SCTP socket. These two flags are mutually exclusive. If flags is formed by a bitwise OR of both SCTP_BINDX_ADD_ADDR and SCTP_BINDX_REM_ADDR, the sctp_bindx() function will fail. Prior to calling sctp_bindx() on an SCTP endpoint, the endpoint should be bound using bind(3SOCKET). On a listening socket, a special INADDR_ANY value for IP or an unspecified address of all zeros for IPv6 can be used in addrs to add all IPv4 or IPv6 addresses on the sys- tem to the socket. The sctp_bindx() function can also be used to add or remove addresses to or from an established association. In such a case, messages are exchanged between the SCTP endpoints to update the address lists for that association if both endpoints support dynamic address reconfiguration. RETURN VALUES
Upon successful completion, the sctp_bindx() function returns 0. Otherwise, the function returns -1 and sets errno to indicate the error. ERRORS
The sctp_bindx() call fails under the following conditions. EBADF The sock argument is an invalid file descriptor. ENOTSOCK The sock argument is not a socket. EINVAL One or more of the IPv4 or IPv6 addresses is invalid. EINVAL The endpoint is not bound. EINVAL The last address is requested to be removed from an established association. ATTRIBUTES
See attributes(5) for descriptions of the following attributes: +-----------------------------+-----------------------------+ | ATTRIBUTE TYPE | ATTRIBUTE VALUE | +-----------------------------+-----------------------------+ |Interface Stability |Evolving | +-----------------------------+-----------------------------+ |MT-Level |Safe | +-----------------------------+-----------------------------+ SEE ALSO
bind(3SOCKET), in.h(3HEAD), libsctp(3LIB), listen(3SOCKET), sctp_freeladdrs(3SOCKET), sctp_freepaddrs(3SOCKET), sctp_getladdrs(3SOCKET), sctp_getpaddrs(3SOCKET), socket(3SOCKET), inet(7P), inet6(7P), ip(7P), ip6(7P), sctp(7P) SunOS 5.10 05 Mar 2004 sctp_bindx(3SOCKET)
All times are GMT -4. The time now is 08:02 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy