epoll+マルチプロセスサーバモデル|C++
1645 ワード
複数のプロセスが1つのポートを同時に傍受し、外部に接続がある場合、複数のプロセスがカーネルによって実現される競合メカニズムによって、1つが起動されます.
直接コード:
直接コード:
int main()
{
//
int fd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(9988);
addr.sin_addr.s_addr = INADDR_ANY;
int ret = bind(fd, (struct sockaddr*)&addr, sizeof(addr));
if(ret < 0)
{
perror("bind");
return 1;
}
listen(fd, 20);
int process_count = 20;
int isParent = 1;
for(int i=0; i 0)
{
for(int i=0; idata.fd == fd)
{
int newfd = accept(fd, NULL, NULL);
ev.data.fd = newfd;
epoll_ctl(epollfd, EPOLL_CTL_ADD, newfd, &ev);
}
else
{
char buf[1024];
int ret = recv(p->data.fd, buf, sizeof(buf), 0);
if(ret > 0)
printf("%s
", buf);
else // ret <= 0
{
close(p->data.fd);
}
}
}
}
}
if(isParent)
{
for(int i=0; i