The UNIX and Linux Forums  

Go Back   The UNIX and Linux Forums > Top Forums > High Level Programming
.
google unix.com



High Level Programming Post questions about C, C++, Java, SQL, and other programming languages here.

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
Client wont connect to server gerperrett IP Networking 2 03-29-2008 11:59 AM
Shell Script fails with "can't connect to client" sseenu79 HP-UX 2 12-20-2006 10:47 AM
Could not connect to the server srikanthus2002 UNIX for Dummies Questions & Answers 4 11-28-2006 07:31 AM
Remove Server Sleep Mode alvintai SUN Solaris 16 04-08-2005 10:08 AM
multi-threaded server, pthreads, sleep Parahat Melayev High Level Programming 0 03-16-2005 12:38 PM

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Search this Thread Rate Thread Display Modes
  #1 (permalink)  
Old 07-17-2002
chenhao_no1 chenhao_no1 is offline
Registered User
  
 

Join Date: Jul 2002
Posts: 32
Question can client connect() when server in sleep(300); after listen(fd,5);

0 .with regards to you
1 .Thank you for reading letter
2 .a Server call sleep(20) after listern(fd,5) . When the Server is in asleep,a Client connect() to it successful and send a lot of appointed data .
3 .Why ? I think that the server is in sleep (beasue I call sleep()) , it donot block at accept() , how can client connect it successful ,
  #2 (permalink)  
Old 07-17-2002
Perderabo's Avatar
Perderabo Perderabo is offline Forum Staff  
Unix Daemon
  
 

Join Date: Aug 2001
Location: Ashburn, Virginia
Posts: 9,124
You can't do that.

Your accept() should be able to either block or not block at your control. If you turned on a non-blocking option on the socket, then yes your accept() call will return an error if there are no pending connections. If you then decide to sleep(), then any connections that arrive while your server is asleep will become become pending connections. After the sleep(), it could re-issue the accept() and establish a connection.

Turning on a non-blocking option and then polling from time to time is supposed to work. But I have never seen it done. I would not sleep for 300 seconds though. That is a very long time to keep a connection waiting for a connect.

But the usual method is to allow accept() to block and wait for a connection to occur.

If your accept() is not blocking then somehow you must have asked it not to. The usual way of doing this would be to have set O_NONBLOCK.

If your accept() call does not behave as I described, then it must be broken. But I find that hard to believe. Never blocking would be a very serious problem.
  #3 (permalink)  
Old 07-18-2002
chenhao_no1 chenhao_no1 is offline
Registered User
  
 

Join Date: Jul 2002
Posts: 32
Client can connect() the Sleeping Server successful

1 . with regards to Perderabo and thanks to everyone who read the post
2 . I do a experiment :
Server call socket() bind() listern() in sequence , and call sleep(30) behind listen and before I call accept() .When the Server is in sleep ,the Client connect() the sleeping Server sucessful and send a lot of appointed data to the sleeping Server ,and then block because the recvive buffer of Server has been full(the Server is asleep)
3 . I refer to <<Unix Network Programming >> volume 1 (author : W.Richard Stevens) later .
I found that accept() only "return the next completed connection from the front of the completed connection queue) .the listen() function do "......... , Data that arrives after the three-way handshake completes,but before the server call accept(),should be queued by the server TCP,up to the size of connected socket's receive buffer"
4 . Then I think that : IN SERVER side , after we call listen() ,the Server application register an appointed socket to the kernel ,then the kernel will monitor the appointed port number and wait for the Client to connect .
Then another question arise :
5 . How does the kernel monitor the appointed port when the Server application do other thing(ie. call sleep() after listen() or not occupy the processor at that point) and
6 . How doese the kernel to notify which process that the data came if many Server application let the kernel to monitory different port
  #4 (permalink)  
Old 07-18-2002
Perderabo's Avatar
Perderabo Perderabo is offline Forum Staff  
Unix Daemon
  
 

Join Date: Aug 2001
Location: Ashburn, Virginia
Posts: 9,124
2) That is interesting! I always thought that the kernel waited for the accept() to establish a connection. Just goes to show that I don't know everything.

5) The port has an open socket associated with it. And the kernel know which port goes to which socket. The TCP/IP code has the job of making the data available to the socket.

6) If the process is using O-NONBLOCK (or equivalent) as yours is, the kernel does nothing. The hope is that the process will eventually decide to issue the accept() or the read() or whatever. If the process has blocked waiting for for data on the socket, it will be "awoken" when data arrives. This will put it on the run queue. And when a cpu runs it, the system call will finally complete.
Closed Thread

Bookmarks

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On




All times are GMT -4. The time now is 05:50 PM.


Powered by: vBulletin, Copyright ©2000 - 2006, Jelsoft Enterprises Limited. Language Translations Powered by .
vBCredits v1.4 Copyright ©2007 - 2008, PixelFX Studios
The UNIX and Linux Forums Content Copyright ©1993-2009. All Rights Reserved.Ad Management by RedTyger

Content Relevant URLs by vBSEO 3.2.0