![]() |
|
|
google unix.com
|
|||||||
| Forums | Register | Forum Rules | Links | Albums | FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| 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 |
![]() |
|
|
LinkBack | Thread Tools | Search this Thread | Rate Thread | Display Modes |
|
|
|
||||
|
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 , |
|
||||
|
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 |
|
|||||
|
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. |
![]() |
| Bookmarks |
| Thread Tools | Search this Thread |
| Display Modes | Rate This Thread |
|
|