Visit Our UNIX and Linux User Community


Socket programming : Accept return 0.


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Socket programming : Accept return 0.
# 1  
Old 10-16-2007
Socket programming : Accept return 0.

I have a server and client code.
My server says accept and my client says a connect.
After accept when i print inet_ntoa(cin.sin_addr) by running the client on same machine i get 127.0.01 but accept returns a zero. Now when i try to do a recv from the client the recv never waits for a send. It jus returns a -1 and exits. Pls help.
# 2  
Old 10-16-2007
accept will only return 0 if stdin is closed as it returns a file descriptor.

for the client you should be doing

Code:
socket(...
connect(...

for the server you should be doing

Code:
socket(...
bind(...
listen(....
while (1)
{
     fd=accept(...)
     if (fd!=-1)
     {
     }
}

# 3  
Old 10-16-2007
I'm doing the same and not closing stdin also(explicitly). Still my accept returns a 0 though the server is able to print the client address.
# 4  
Old 10-16-2007
Quote:
Originally Posted by abc.working
Still my accept returns a 0
I find that *very* hard to believe. Can you post the exact code from the accept to you printing the filedescriptor and address?
# 5  
Old 10-16-2007
Server code:
Code:
#define MYPORT 1034
int main()
{
 struct sockaddr_in sin;
 struct sockaddr_in cin;
 int s = socket(PF_INET,SOCK_STREAM,0);
 sin.sin_family = AF_INET;
 sin.sin_port = htons(MYPORT);
 sin.sin_addr.s_addr = INADDR_ANY;
 memset(sin.sin_zero,'\0',sizeof(sin.sin_zero));
 int check=bind(s,(struct sockaddr *)&sin,sizeof(sin));
 check=listen(s,5);
 addrlen=sizeof(cin);
//My server waits when below line is encountered
 s_client = accept(s,(struct sockaddr *)&cin,&addrlen);
//once client runs and connect is executed accept returns 0
 printf("hi %s\n",inet_ntoa(cin.sin_addr));
 char *buf;
 //the below recv is non blocking, it doesn't wait for client to send.
 recv(s_client,buf,100,0);
}

Client code:
Code:
int main(int argc,char *argv[])
{
 struct sockaddr_in sin;
 struct sockaddr_in cin;
 struct hostent *hp;
 hp=gethostbyname(argv[1]);
 cin.sin_family = AF_INET;
 cin.sin_addr = *((struct in_addr *)hp->h_addr);
 cin.sin_port = htons(MYPORT);
 memset(cin1.sin_zero,'\0',sizeof(cin.sin_zero));
 int s = socket(PF_INET,SOCK_STREAM,0);
 int check = connect(s,(struct sockaddr *)&cin,sizeof(cin));
 char buf[100] = "from client";
 int len = strlen(buf);
 int bytes_sent = send(s,buf,len,0);
 printf("%d",bytes_sent); // output is 11
}


Last edited by vino; 10-16-2007 at 07:58 AM.. Reason: Added code tags
# 6  
Old 10-16-2007
I run the server code, it waits for a connect.
Now i run my client code(client.c):
client localhost

now the server waits till client connects then it exits with recv() returning a -1.
client sends the data and quits.

Last edited by abc.working; 10-16-2007 at 08:07 AM..
# 7  
Old 10-17-2007
MySQL

s_client = accept(s,(struct sockaddr *)&cin,&addrlen);

Got the solution:
Actually above line i was executing as

if(s_client=accept(s,(struct sockaddr *)&cin,&addrlen !=-1)

but now i do it as
if((s_client=accept(s,(struct sockaddr *)&cin,&addrlen)!=-1)
Paranthesis was the whole problem creator Smilie

Thanks a lot.
 

Previous Thread | Next Thread
Test Your Knowledge in Computers #112
Difficulty: Easy
macOS was not the largest Unix largest installed base in 2017.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

How to write a shell script to automatically accept return key with out user intervention?

Hi Friends, i am creating a shell script which is accepting file name as input parameter from Java and invoking finacle service. The service will accpet text file,B2k_session id,etc and upload the text file data in finacle database. My shell script looks like this:- #! /bin/ksh... (2 Replies)
Discussion started by: vadlamudy
2 Replies

2. Programming

socket programming

how to include socket.h in visual studio 2005.. (2 Replies)
Discussion started by: asd123
2 Replies

3. Programming

socket accept() keeps looping

I'm using C/ C++ with gcc on Linux. I've a server socket where accept() is called on the socket inside a while() loop. The problem I am facing is that the first call to accept is blocking (i.e., the program waits for the first connection) but as soon as I fork afterwards (so that the child process... (2 Replies)
Discussion started by: jaywalker
2 Replies

4. Programming

Help with socket programming in C

hi guys i got this code trying to make connection between the server and multi clients but when i do ./server i got message server waiting then when i run ./client it says client 1 nosuch file i dont know whats that should i use any argument plz help how to compile and run and whats the expected... (1 Reply)
Discussion started by: kedah160
1 Replies

5. UNIX for Advanced & Expert Users

socket programming

can we send udp message to a destination ip address .. without having an ip address configured in our machine using recvfrom ? (2 Replies)
Discussion started by: Gopi Krishna P
2 Replies

6. IP Networking

Port number of socket returned by accept()

Hi, I typed a few tcp/ip client/server examples from a book and it works - sort of - but I noticed something strange. When I run my server I set it to use port 3001 and the client uses the same port to connect to server. They succeed, but the server prints something that doesn't really make much... (0 Replies)
Discussion started by: idelovski
0 Replies

7. Programming

Please help! accept function problems in Socket programming

Hi, I have a client-server socket program. It has been working fine for over a year, but recently it started to show strange behavior.:confused: After the server program runs for a while, it will show in the top command saying it is using lots of CPU, MEM. I assume it means the server code is... (1 Reply)
Discussion started by: natxie
1 Replies

8. IP Networking

socket programming

my system is a stand alone system... i want to try doing socket porgramming..ihave heard that this is usually done during testing... how can i do that....? (6 Replies)
Discussion started by: damn_bkb
6 Replies

9. Programming

Socket Programming socket

Hello, I actually try to make client-server program. I'm using SCO OpenServer Release 5.0.0 and when I try to compile my code (by TELNET) I've got this error : I'm just using this simple code : and I get the same error if I use : If someone can help me, Thanks (2 Replies)
Discussion started by: soshell
2 Replies

10. Programming

Socket Programming

Dear Reader, Is there any way to check up socket status other than 'netstatus ' Thanks in advance, (1 Reply)
Discussion started by: joseph_shibu
1 Replies

Featured Tech Videos