[cs631apue] Forking too many processes.
lbustama
lbustama at stevens.edu
Mon Nov 4 14:48:45 EST 2013
By the way here is part of the code. Just in case I'm doing something
wrong:
listen(sock, 5);
184 do {
185 FD_ZERO(&ready);
186 FD_SET(sock, &ready);
187 to.tv_sec = 5;
188 to.tv_usec = 0;
189 if (select(sock + 1, &ready, 0, 0, &to) < 0) {
190 perror("select");
191 continue;
192 }
193 if (FD_ISSET(sock, &ready)) {
194
195 pid_t pid;
196 if((pid = fork()) < 0)
197 {
199 perror("fork error");
200 }
201 if(pid == 0) /*child*/
202 {
203 /* variables for client information */
204 socklen_t client_length;
205 struct sockaddr_in client;
206 unsigned int client_port;
207
208 client_length = sizeof(client);
209 msgsock = accept(sock, (struct sockaddr *)&client,
210 &client_length);
....
230 exit(EXIT_SUCCESS);
231 }
232 else
233 {
234 printf("forked pid: %d\n",pid);
235 }
236 }
243 } while (TRUE);
Thanks,
Luis
On 11/04/2013 2:43 PM, lbustama wrote:
> Hi,
>
> When a new connection comes in to the server I fork a new process to
> take care of the new connection.
>
> I was having an issue after forking the new process.
> The problem was that before the child process was able to
> "accept(...)" the connection the parent process forks another process
> as the connection is still in the queue.
>
> macbookpro:HW3$ ./sws &
> [2] 6832
>
> macbookpro:HW3$ Server listening on IP address 0.0.0.0 and port# 8080
> forked pid: 6834
> 127.0.0.1#62858: Connected:
> forked pid: 6835
>
> macbookpro:HW3 Luis$ !net
> netstat -na | grep 8080
> tcp4 0 0 127.0.0.1.8080 127.0.0.1.62858
> ESTABLISHED
> tcp4 0 0 127.0.0.1.62858 127.0.0.1.8080
> ESTABLISHED
> tcp4 0 0 *.8080 *.*
> LISTEN
> macbookpro:HW3 Luis$
>
> ^^^ 1 active connection
>
> macbookpro:HW3$ ps -o pid,ppid,comm | grep sws
> 6832 6556 ./sws
> 6834 6832 ./sws
> 6835 6832 ./sws
>
>
>
> ^^^ 2 new processes for 1 request
>
>
> The way I got around this was to put the parent process to sleep for 1
> second, which will allow the child to grab the new connection.
>
> I was wondering if there is a better way to do this? what if your web
> server receives several connections per second. Only 1 connection is
> handled every second, which is obviously not good.
>
> Thanks,
>
> Luis
More information about the cs631apue
mailing list