当前位置: 技术问答>linux和unix
请问如何fork tcp连接
来源: 互联网 发布时间:2016-06-08
本文导语: 比如一个服务器程序 有父进程 在循环 accept 一旦有新的连接到父进程就产生 子进程 用父进程返回的socket来 和客户端通信 命名这个子进程为 server_child1 命名这个客户端 client1 然后父进程继续监听...
比如一个服务器程序
有父进程 在循环 accept
一旦有新的连接到父进程就产生
子进程 用父进程返回的socket来 和客户端通信
命名这个子进程为 server_child1 命名这个客户端 client1
然后父进程继续监听调用accept
当有新的连接 产生
新的子进程 命名为server_child2 命名客户端 client2
问题出来了
当我用共享变量 来共享 server_child1 和 server_child2的 socket值
发现server_child2由于经过2次accept可以和两个client :client1 client2很好
的通信
server_child1 由于只经过一个accept所以只有client1 可以与之通信,请问,怎样使
server_child1可以与两个client通信。。多谢高手了
有父进程 在循环 accept
一旦有新的连接到父进程就产生
子进程 用父进程返回的socket来 和客户端通信
命名这个子进程为 server_child1 命名这个客户端 client1
然后父进程继续监听调用accept
当有新的连接 产生
新的子进程 命名为server_child2 命名客户端 client2
问题出来了
当我用共享变量 来共享 server_child1 和 server_child2的 socket值
发现server_child2由于经过2次accept可以和两个client :client1 client2很好
的通信
server_child1 由于只经过一个accept所以只有client1 可以与之通信,请问,怎样使
server_child1可以与两个client通信。。多谢高手了
|
http://www.ibm.com/developerworks/cn/linux/l-socket-ipc/index.html
太长了,建议你还是先看看unix网络编程实例。
里面有关于多进程,多线程,以及IO复用,各种模型的并发服务器。
我发的这个链接也有例子。
太长了,建议你还是先看看unix网络编程实例。
里面有关于多进程,多线程,以及IO复用,各种模型的并发服务器。
我发的这个链接也有例子。
|
#include "unp.h"
int
main(int argc, char **argv)
{
int listenfd, connfd;
pid_t childpid;
socklen_t clilen;
struct sockaddr_in cliaddr, servaddr;
void sig_chld(int);
listenfd = Socket(AF_INET, SOCK_STREAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(SERV_PORT);
Bind(listenfd, (SA *) &servaddr, sizeof(servaddr));
Listen(listenfd, LISTENQ);
Signal(SIGCHLD, sig_chld);
for ( ; ; ) {
clilen = sizeof(cliaddr);
if ( (connfd = accept(listenfd, (SA *) &cliaddr, &clilen))