测试代码:多进程服务器

typedef struct sockaddr *addr_t;
void killFun();
int dataFun(int connfd);
int main(int argc,char *argv[])
{
	//AF_INET:ipv4
	int sockfd = socket(AF_INET,SOCK_STREAM,0);
	if(sockfd < 0){
		perror("socket");
		return -1;
	}
	struct sockaddr_in seraddr;
	seraddr.sin_family = AF_INET;
	seraddr.sin_port = htons(9999);
	seraddr.sin_addr.s_addr = inet_addr("0.0.0.0");

	if (-1 == bind(sockfd,(addr_t)&seraddr,sizeof(seraddr))){
		perror("bind");
		return -1;
	}
	printf("--bind--\n");
	if(-1 == listen(sockfd,5)){
		perror("listen");
		return -1;
	}

	printf("--listen--\n");
	struct sockaddr_in cliaddr;
	socklen_t len = sizeof(cliaddr);
	signal(SIGCHLD,killFun);
	while(1)
	{
		int connfd = accept(sockfd,(addr_t)&cliaddr,&len);
		if (connfd < 0){
			perror("accept");
			return -1;
		}
		pid_t pid;
		if((pid = fork())<0){
			perror("fork");
			return -1;
		}
		else if(pid == 0){
			close(sockfd);
			dataFun(connfd);
		}
		else if(pid > 0){
			close(connfd);
		}

	}

	return 0;
}
int dataFun(int connfd)
{
	while(1)
	{
		char buf[64] = {0};
		sprintf(buf,"hello,i am %ld",(long)getpid());
		write(connfd,buf,strlen(buf));
		memset(buf,0,64);
		int ret = read(connfd,buf,sizeof(buf));
		if(ret <= 0){
			printf("%ld:exit",(long)getpid());
			exit(1);
		}
		printf("recv:%s\n",buf);
	}
}

void killFun()
{
	wait(NULL);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值