안녕하세요.
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