Sponsored Content
Top Forums Programming Strange "getsockopt" Solaris behavior Post 302932120 by revolta25 on Monday 19th of January 2015 07:16:39 AM
Old 01-19-2015
First, thanks for your interest

Code:
#include <assert.h>
#include <sys/fcntl.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/devpoll.h>
#include <unistd.h>
#include <netinet/in.h>
#include <netinet/in.h>
#include <netinet/ip.h> 
#include <sys/socket.h>
#include <netinet/tcp.h>

int main()
{
    int fd = -1;
    int ret = 0;
    int error_s = 0;
    struct sockaddr_in serv_addr;
    int delay_time = 3000;
    int len_s = sizeof(int);
    int try = 3;
    
    fd = socket(PF_INET, SOCK_STREAM, 0);
    fcntl(fd, F_SETFL, O_NONBLOCK);
    printf("fd=\"%d\" \n", fd);
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_port = htons(45678);
    serv_addr.sin_addr.s_addr = inet_addr("10.0.0.5");
    
try_connect_again:

    printf("try_connect_again\n");
    printf("attempt left %d ...\n", try);
    if (!try)
        goto fin;
        
    usleep(2000);
    ret = connect(fd, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr_in));
    printf("connect ret=%d, errno=%d\n", ret, errno);
    
    if (errno == EINPROGRESS)
    {
        do
        {
            struct pollfd fds;

            fds.fd = fd;
            fds.events = POLLIN | POLLOUT;
            ret = poll(&fds, 1, delay_time);
            
            if (ret == -1) //poll error
            {
                goto fin;
            }
        }
        while (!ret);
        
        if (ret)
        {
            ret = getsockopt(fd, SOL_SOCKET, SO_ERROR, &error_s, &len_s);
            printf("getsockopt, ret=%d, error_s=%d \n", ret, error_s);
            if (error_s == 0)
                printf("connected\n");
            else
            {
                try--;
                goto try_connect_again;
            }
        }
        else if (ret == 0)
        {
            try--;
            goto try_connect_again;
        }
    }

fin:
    printf("end\n");
    return 0;
}

gcc -lsocket -lresolv -lnsl -g -o test1 test1.c

Above code generate following output:

Quote:
fd="3"
try_connect_again
attempt left 3 ...
connect ret=-1, errno=150
getsockopt, ret=0, error_s=146
try_connect_again
attempt left 2 ...
connect ret=-1, errno=150
getsockopt, ret=0, error_s=0
I can't find the reason, why getsockopt works different during second attempt.
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

[Perl] Strange ne "NO" behavior.

Hi there, I have a strange problem and I cannot figure it out what I am doing wrong here. Let me try to picture it. In principle it is prety straight forward, but something odd is happening. Here is part of the input file snmp_alm.cfg: ... (2 Replies)
Discussion started by: ejdv
2 Replies

2. Solaris

Solaris escape my script from "-" to "/226"

Hello everyone. I beg your guys pardon please. I try to ls -al in many path/directories. So, I put the code in text file which look like below; ls -al / ls -al /etc ls -al /etc/default ... however, when I paste it to Solaris over SecureCRT, it seems the code was escaped from "-" to... (0 Replies)
Discussion started by: Smith
0 Replies

3. Shell Programming and Scripting

"Odd" behavior exiting shell script

Is it normal behavior for a shell script that terminates to terminate its parent shell when executed with the "." option? For example, if I have the example script (we'll name it ex.sh): #!/bin/sh if then echo "Bye." exit 2 fi And I execute it like this: >./ex.sh It... (6 Replies)
Discussion started by: DreamWarrior
6 Replies

4. Shell Programming and Scripting

awk command to replace ";" with "|" and ""|" at diferent places in line of file

Hi, I have line in input file as below: 3G_CENTRAL;INDONESIA_(M)_TELKOMSEL;SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL My expected output for line in the file must be : "1-Radon1-cMOC_deg"|"LDIndex"|"3G_CENTRAL|INDONESIA_(M)_TELKOMSEL"|LAST|"SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL" Can someone... (7 Replies)
Discussion started by: shis100
7 Replies

5. UNIX for Advanced & Expert Users

"╭─ " Character combo in $PATH causes strange autocompletion behavior in zsh

I've posted about this before, but only recently narrowed the problem down to a specific cause. Ok, first of all, the behavior: It occurs when autocompletion brings up its list (not when there is only a single option). Basically, if I were to type, say, cd ~/<TAB> I would get something... (2 Replies)
Discussion started by: marshaul
2 Replies

6. Solaris

Printer configuration Migration from Solaris 10 "LP" to Solaris 11 "CUPS"

Need to find a way to import an LP printers.conf file to CUPS. I have some new Solaris 11.1 boxes that need to have 300 printers added. (0 Replies)
Discussion started by: os2mac
0 Replies

7. Shell Programming and Scripting

Commenting out "expr" creates weird behavior

This really puzzles me. The following code gives me the error 'expr: syntax error' when I try to do multi-line comment using here document <<EOF echo "Sum is: `expr $1 + $2`" EOF Even if I explicitly comment out the line containing the expr using "#", the error message would still exist... (3 Replies)
Discussion started by: royalibrahim
3 Replies

8. Shell Programming and Scripting

Weird behavior of command "local"

Hi there, I'm running into a very weird situation. Let's forget about the purpose of my initial script please. I noticed the bug whatever I'm trying to do. I'm on an old server running bash 3.1.17. Say we have the following script : foo:~# cat /tmp/test #!/bin/bash f1() { local... (9 Replies)
Discussion started by: chebarbudo
9 Replies

9. Shell Programming and Scripting

Why awk print is strange when I set FS = " " instead of FS = "\t"?

Look at the following data file(cou.data) which has four fields separated by tab. Four fields are country name, land area, population, continent where it belongs. As for country name or continent name which has two words, two words are separated by space. (Data are not accurately... (1 Reply)
Discussion started by: chihuyu
1 Replies

10. Shell Programming and Scripting

Bash script - Print an ascii file using specific font "Latin Modern Mono 12" "regular" "9"

Hello. System : opensuse leap 42.3 I have a bash script that build a text file. I would like the last command doing : print_cmd -o page-left=43 -o page-right=22 -o page-top=28 -o page-bottom=43 -o font=LatinModernMono12:regular:9 some_file.txt where : print_cmd ::= some printing... (1 Reply)
Discussion started by: jcdole
1 Replies
PAPI_set_multiplex(3)						       PAPI						     PAPI_set_multiplex(3)

NAME
PAPI_set_multiplex - Convert a standard event set to a multiplexed event set. SYNOPSIS
Detailed Description C Interface: #include <papi.h> int PAPI_set_multiplex( int EventSet ); Parameters: EventSet an integer handle for a PAPI event set as created by PAPI_create_eventset Return values: PAPI_OK PAPI_EINVAL -- One or more of the arguments is invalid, or the EventSet is already multiplexed. PAPI_ENOCMP -- The EventSet specified is not yet bound to a component. PAPI_ENOEVST -- The EventSet specified does not exist. PAPI_EISRUN -- The EventSet is currently counting events. PAPI_ENOMEM -- Insufficient memory to complete the operation. PAPI_set_multiplex converts a standard PAPI event set created by a call to PAPI_create_eventset into an event set capable of handling multiplexed events. This must be done after calling PAPI_multiplex_init, and either PAPI_add_event or PAPI_assign_eventset_component, but prior to calling PAPI_start(). Events can be added to an event set either before or after converting it into a multiplexed set, but the conversion must be done prior to using it as a multiplexed set. Note: Multiplexing can't be enabled until PAPI knows which component is targeted. Due to the late binding nature of PAPI event sets, this only happens after adding an event to an event set or explicitly binding the component with a call to PAPI_assign_eventset_component. Example: * int EventSet = PAPI_NULL; * int ret; * * // Create an empty EventSet * ret = PAPI_create_eventset(&EventSet); * if (ret != PAPI_OK) handle_error(ret); * * // Bind it to the CPU component * ret = PAPI_assign_eventset_component(EventSet, 0); * if (ret != PAPI_OK) handle_error(ret); * * // Check current multiplex status * ret = PAPI_get_multiplex(EventSet); * if (ret == TRUE) printf("This event set is ready for multiplexing.") * if (ret == FALSE) printf("This event set is not enabled for multiplexing.") * if (ret < 0) handle_error(ret); * * // Turn on multiplexing * ret = PAPI_set_multiplex(EventSet); * if ((ret == PAPI_EINVAL) && (PAPI_get_multiplex(EventSet) == TRUE)) * printf("This event set already has multiplexing enabled0); * else if (ret != PAPI_OK) handle_error(ret); * See Also: PAPI_multiplex_init PAPI_get_multiplex PAPI_set_opt PAPI_create_eventset Author Generated automatically by Doxygen for PAPI from the source code. Version 5.2.0.0 Tue Jun 17 2014 PAPI_set_multiplex(3)
All times are GMT -4. The time now is 10:05 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy