в общем.Ю вот че у меня получилось...
Код |
---|
#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netdb.h>
#define BUFSIZ 1024
int main()
{
struct sockaddr_in local;
memset(&local, '\0', sizeof(local));
local.sin_family = PF_INET;
local.sin_addr.s_addr = htonl(INADDR_ANY);
local.sin_port = htons(31337);
int mysck;
mysck = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
if(!mysck)
{
fprintf(stderr, "Cannot create socket!!\n");
_Exit(-1);
}
bind(mysck, (struct sockaddr *)&local, sizeof(local));
listen(mysck, 2);
char clientreq[BUFSIZ];
int clientsock;
while(1)
if(clientsock = accept(mysck, 0, 0))
{
if(fork()==0) // все тоже самое, тока всю работу с клиентом проводит дочерний процесс
{
int ok=1;
close(mysck); // дочеренму процессу не нужен дескриптор основного сокета
while(ok) //беседуем
{
int co;
co=recv(clientsock , clientreq, BUFSIZ, 0);
if(co==-1)
{
ok=0; //error
}
else
if(co>0)
{
if(clientreq[0] == 'q')
{
ok=0;
}
else send(clientsock, "not found\n", 10, 0);
}
}// of while
send(clientsock, "good bye\n", 9, 0);
close(clientsock); //это я сюда перенес, на самом деле, пофиг..
exit(0); //заверщает дите
}//of fork
else
{ //это родитель
close(clientsock); // родителю не нужен дескриптор клиентского сокета
// далее, родитель продолжает работать, принимать соединения.
}
}
return 0;
}
|
При таком раскаладе, паралельно с сервером может работать любое число клиентов....
вроде все понятною.... тока вот чета у меня вот такими какашками зосоряется список процессов
Код |
---|
-bash-2.05b$ ps -aux | grep s3
admin 0 0.0 0.0 0 0 p1 ZW+ - 0:00.00 (s3)
admin 0 0.0 0.0 0 0 p1 ZW+ - 0:00.00 (s3)
admin 0 0.0 0.0 0 0 p1 ZW+ - 0:00.00 (s3)
admin 41612 0.0 0.1 1176 468 p1 I+ 6:08PM 0:00.00 ./s3
admin 0 0.0 0.0 0 0 p1 ZW+ - 0:00.00 (s3)
|
мож кто подскажет, что не так?
в остальном все работаетю....