[Okta Webinar] Learn how to a build a cloud-first strategyRegister Now

x
?
Solved

"Accept" - works on some stations, not others

Posted on 2002-06-21
8
Medium Priority
?
304 Views
Last Modified: 2010-04-21
Hi
  I have written a little c++ client/server in linux and everything worked fine. But when I moved the source to another machine and compiled it there, the accept call returns a invalid argument error, when I run and try to connect to the server with a connect call from the client.  If I only move the executable to this machine, it works fine.  So it seems there is something going wrong a compile-time.  I use g++ to compile.

I hope someone can help.  Thanks in advance.

Dadi
0
Comment
Question by:huxun
7 Comments
 
LVL 5

Expert Comment

by:garboua
ID: 7100974
another linux machine?
g++ -v to see what versions are you running of both machines.

"the accept call returns a invalid argument error,"
I don't understand, if the accept returns an error that would mean it compiles OK and then compiler is NOT an issue, If the error is compilation or link time? then tell us more, line 1--> other machine and versions of compiler. it would really help if you post the actuall error
0
 

Author Comment

by:huxun
ID: 7103311
Hi ... I figured out how to solve this stupid error.  But I don't understand why it occured.  I have the same version of the compiler on all the machines.  The thing was that when I send the socklen_t argument into 'accept' it ran ok if I compiled at the machine I originally wrote the program, but not if I compiled at some other machine.  Still, I could copy the executable file to this other machine from the original and it would run fine.  So I started commenting alot af stuff out and adding it piece by piece, and on the end I found the cause of the error. This:

char c;
socklen_t fromlen;
.
.
.
accept( s, (struct sockaddr *) &fsain, &fromlen);

had to be changed to this:

socklen_t fromlen;
char c;
.
.
.
accept( s, (struct sockaddr *) &fsain, &fromlen);


I do not understand why this is the case and if someone has a clue, please tell me.
0
 
LVL 4

Expert Comment

by:newmang
ID: 7105910
huxun

Without seeing the remainder of your code its hard to offer an opinion. However based on bitter experience I find that in cases where swapping the order of variable declarations "fixes" problems then the real problem lies with the variable being partially over-written by another variable. I think you will find that the second piece of code works because the variable c is not used prior to fromlen being used and the value being loaded into fromlen is longer than socklen_t for some reason. In the first case part or all of fromlen is being over-written by another variable.

I would need to see more of your code to go any further, perhaps you could post the include statements, the variable declarations (if any) after the two you have posted, the code that initialises fromlen (and the declaration of any variables used in this process).

Perhaps you could revert to the original code, compile it on the offending system (with debug) then run it through the debugger watching fromlen at each step to detect the location where this variable gets corrupted.

Cheers - Gavin
0
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
LVL 5

Expert Comment

by:garboua
ID: 7119122
sound like a logical explanation newmang.
0
 

Author Comment

by:huxun
ID: 7121455
I wrote out the size and location of the variables and they didn't overlap.  Still, do not understand what was going wrong. Guess the compiler is kaput.  It is version 2.96 so ...
0
 
LVL 3

Accepted Solution

by:
pjb1008 earned 400 total points
ID: 7249077
The fromlen parameter is input and output.
On entry to accept(), it is the size of the address buffer;
on exit it is the size of the address.

Typical usage is:

struct sockaddr_in addr;
sockaddr_t len=sizeof(addr);

retval=accept(fd, (struct sockaddr *)&addr, &len);

Chances are that len wasn't initialised, and you picked up whatever value happened to be on the stack. This will yield different results with different compilers.
0
 
LVL 20

Expert Comment

by:jmcg
ID: 9925511
No comment has been added lately, so it's time to clean up this TA.
I will leave the following recommendation for this question in the Cleanup topic area:

Accept: pjb1008 {http:#7249077}

Please leave any comments here within the next seven days.
PLEASE DO NOT ACCEPT THIS COMMENT AS AN ANSWER!

jmcg
EE Cleanup Volunteer
0

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

The purpose of this article is to fix the unknown display problem in Linux Mint operating system. After installing the OS if you see Display monitor is not recognized then we can install "MESA" utilities to fix this problem or we can install additio…
The purpose of this article is to demonstrate how we can upgrade Python from version 2.7.6 to Python 2.7.10 on the Linux Mint operating system. I am using an Oracle Virtual Box where I have installed Linux Mint operating system version 17.2. Once yo…
this video summaries big data hadoop online training demo (http://onlineitguru.com/big-data-hadoop-online-training-placement.html) , and covers basics in big data hadoop .
Is your data getting by on basic protection measures? In today’s climate of debilitating malware and ransomware—like WannaCry—that may not be enough. You need to establish more than basics, like a recovery plan that protects both data and endpoints.…

872 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question