当前位置: 技术问答>linux和unix
菜鸟Unix网络编程问题,僵尸进程
来源: 互联网 发布时间:2016-11-25
本文导语: 写了个server程序,什么运行后,子进程就变成了僵尸进程,用telnet连接也不会有输出啊。。。gdb运行来运行去都阻塞在accept上面,子进程根本执行到,求大侠指点。 #include #include #include #include #include #include #define SERV_...
写了个server程序,什么运行后,子进程就变成了僵尸进程,用telnet连接也不会有输出啊。。。gdb运行来运行去都阻塞在accept上面,子进程根本执行到,求大侠指点。
#include
#include
#include
#include
#include
#include
#define SERV_PORT 8989
#define LISTENQ 10
#define MAXLINE 1024
int str_echo(int fd);
int writen(int fd,void* buf,size_t len);
int main(){
int listenfd,connfd,clilen,servlen;
pid_t childpid;
struct sockaddr_in servaddr,tempaddr,cliaddr;
listenfd=socket(AF_INET,SOCK_STREAM,0);
bzero(&servaddr,sizeof(struct sockaddr_in));
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(SERV_PORT);
servaddr.sin_family=AF_INET;
bind(listenfd,(struct sockaddr*)&servaddr,sizeof(struct sockaddr));
listen(listenfd,LISTENQ);
getsockname(listenfd,(struct sockaddr*)&tempaddr,&servlen);
printf("%s%d","host listen",tempaddr.sin_port);
while(1){
accept(listenfd,(struct sockaddr*)&cliaddr,&clilen);
if((childpid=fork())==0){
close(listenfd);
str_echo(connfd);
exit(0);
}
close(connfd);
}
}
int str_echo(int fd){
int nread,nleft;
char buf[MAXLINE];
while(1){
while((nread=read(fd,buf,MAXLINE))>0){
if(nread
#include
#include
#include
#include
#include
#include
#define SERV_PORT 8989
#define LISTENQ 10
#define MAXLINE 1024
int str_echo(int fd);
int writen(int fd,void* buf,size_t len);
int main(){
int listenfd,connfd,clilen,servlen;
pid_t childpid;
struct sockaddr_in servaddr,tempaddr,cliaddr;
listenfd=socket(AF_INET,SOCK_STREAM,0);
bzero(&servaddr,sizeof(struct sockaddr_in));
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(SERV_PORT);
servaddr.sin_family=AF_INET;
bind(listenfd,(struct sockaddr*)&servaddr,sizeof(struct sockaddr));
listen(listenfd,LISTENQ);
getsockname(listenfd,(struct sockaddr*)&tempaddr,&servlen);
printf("%s%d","host listen",tempaddr.sin_port);
while(1){
accept(listenfd,(struct sockaddr*)&cliaddr,&clilen);
if((childpid=fork())==0){
close(listenfd);
str_echo(connfd);
exit(0);
}
close(connfd);
}
}
int str_echo(int fd){
int nread,nleft;
char buf[MAXLINE];
while(1){
while((nread=read(fd,buf,MAXLINE))>0){
if(nread