#include "sock.h"
#include <signal.h>
#include <errno.h>
#include <sys/wait.h>
#define MAXSIZE 80
static int childnum = 0;
void usage(const char *info)
{
printf("Usage: %s <PORT>\n", info);
exit(0);
}
void catch_sig(int sig)
{
if(sig == SIGCHLD){
//wait(NULL);
while(waitpid(-1, NULL, WNOHANG) > 0)
printf("(%03d)child exit\n", childnum--);
}
}
int main(int argc, char **argv)
{
if(argc != 2)
usage(argv[0]);
signal(SIGCHLD, catch_sig);
int sockfd;
sockfd = Socket(AF_INET, SOCK_STREAM, 0);
int on = 1;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof on);
struct sockaddr_in srvaddr, cliaddr;
bzero(&srvaddr, sizeof srvaddr);
srvaddr.sin_family = AF_INET;
srvaddr.sin_addr.s_addr = htonl(INADDR_ANY);
srvaddr.sin_port = htons(atoi(argv[1]));
Bind(sockfd, (struct sockaddr *)&srvaddr,
sizeof srvaddr);
Listen(sockfd, 5);
int connfd;
socklen_t len;
char recv[MAXSIZE];
pid_t pid;
len = sizeof cliaddr;
while(1){
bzero(&cliaddr, len);
connfd = Accept(sockfd,
(struct sockaddr*)&cliaddr, &len);
printf("(%03d)new connection: %s:%hu\n",
childnum++,
inet_ntoa(cliaddr.sin_addr),
cliaddr.sin_port);
if((pid=Fork()) > 0){
close(connfd);
continue;
}
/*
** Child Process:
** deal with the new connection
*/
close(sockfd);
int nread;
while(1){
bzero(recv, MAXSIZE);
while((nread=read(connfd, recv, MAXSIZE)) < 0
&& errno == EINTR);
if(nread > 0)
write(STDOUT_FILENO, recv, strlen(recv));
if(nread < 0){
perror("read error");
exit(0);
}
else if(nread == 0)
break;
}
}
return 0;
}
linux网络编程代码
需积分: 9 21 浏览量
2013-05-11
12:44:31
上传
评论 1
收藏 196KB ZIP 举报
快乐出发0220
- 粉丝: 7
- 资源: 136
最新资源
- 2023-04-06-项目笔记 - 第一百十五阶段 - 4.4.2.113全局变量的作用域-113 -2024.04.26
- 2023-04-06-项目笔记 - 第一百十五阶段 - 4.4.2.113全局变量的作用域-113 -2024.04.26
- htmlzwbjq_downyi.com.zip
- 无头单向非循环链表的实现(Test.c)
- 无头单向非循环链表的实现(SList.c)
- 浏览器重定向插件更新文件
- SSA-BP麻雀算法优化BP神经网络多特征分类预测(Matlab实现完整源码和数据)
- 粒子群算法优化BP神经网络PSO-BP的MATLAB代码(数值预测)
- 基于Springboot的一起看书平台.zip
- 无头单向非循环链表的实现(SList.h)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈