>> Delete Reply from No. 26167 article
No. RE: [질문] 골때리는 미친 코드좀 봐주셈.. ^^

등록 2001-04-04 15:00:00 By localhost     조회 1
이름 차주현    

		안녕하세요.
 accept 와 fork 와 sockfd 값의 관계가 좀 이상하네요..
 제가 생각하는 게 맞다면 하나의 클라이언트가 접속하게 되면 여러개의 프로세스가
fork() 되면서 같은 sockfd(accept된것)에 send 하게 되니 당연히 잘못된 fd라고 나
오지 않나요?
  : #include <stdio.h>
: #include <stdlib.h>
: #include <errno.h>
: #include <string.h>
: #include <sys/types.h>
: #include <netinet/in.h>
: #include <sys/socket.h>
: #include <sys/wait.h>
: #include <mysql.h>
:
: #define MYPORT 2002
: #define BACKLOG 10
:
: main()
: {
: 	int sockfd, new_fd;
: 	struct sockaddr_in my_addr;
: 	struct sockaddr_in their_addr;
: 	int sin_size;
:
: 	MYSQL mysql;
: 	MYSQL_RES *res;
: 	MYSQL_ROW row;
: 	int fields;
: 	int cnt;
: 	char *query;
:
: 	if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1){
: 		perror("socket");
: 		exit(1);
: 	}
:
: 	my_addr.sin_family = AF_INET;
: 	my_addr.sin_port = htons(MYPORT);
: 	my_addr.sin_addr.s_addr = INADDR_ANY;
: 	bzero(&(my_addr.sin_zero), 8);
:
: 	if(bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1){
: 		perror("bind");
: 		exit(1);
: 	}
:
: 	if(listen(sockfd, BACKLOG) == -1) {
: 		perror("listen");
: 		exit(1);
: 	}
:
: 	mysql_init(&mysql);
:
: 		if(!mysql_real_connect(&mysql,"localhost","kimh81","*****","kimh81",0,(char *)NULL, 0))
: 		{
: 			printf("error no: %d%s", mysql_errno(&mysql), mysql_error(&mysql));
: 			exit(1);
: 		}
:
: 		query = "SELECT * FROM bbs_se";
: 		if(mysql_real_query (&mysql, query, strlen(query)))
: 		{
: 			printf("error no: %d%s", mysql_errno(&mysql), mysql_error(&mysql));
: 			exit(1);
: 		}
:
: 		res = mysql_store_result(&mysql);
: 		fields = mysql_field_count(&mysql);
:
: 	while(1){
: 		sin_size = sizeof(struct sockaddr_in);
: 		if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -1){
: 			perror("accept");
: 			continue;
: 		}
:
: 		while((row = mysql_fetch_row(res)))
: 		{
: 				for(cnt = 0; cnt < fields; ++cnt)
:
: 					if(!fork()){
: 						if(send(new_fd, row[cnt], 0, 0) == -1)
: 							perror("send");
: 						close(new_fd);
: 						exit(0);
: 				}
: 				close(new_fd);
: 		}
:
: 		mysql_free_result(res);
: 		mysql_close(&mysql);
:
: 			while(waitpid(-1, NULL, WNOHANG) > 0);
: 		}
: }
:
: 이따구루다가.. 코딩했습니다.
:
: 이렇게 해서 서버에 오려놓구..
:
: 클라이언트로 접속하면 후후..
:
: 서버에 잘못된파일기술자라고 하면서 에러가 죽~~~ 나오네용 ㅡ,.ㅡ;;
:
: mysql에서 나온 값을 어떻게 클라이언트로 전송해야하죠? 웅?
:
: --
: 윽~ 똥발바따~ ㅜ.ㅜ
 --
return true
[관리자] 패스워드를 입력 하십시오. 답장이 존재하면 함께 삭제됩니다.[ 목록 | 이전 ]
패스워드:    

Copyleft 1999-2026 by JSBoard Open Project
Theme Designed by IDOO All right reserved