Linux C 웹 서버 관련 문의 드립니다.
글쓴이: lstlove9804 / 작성시간: 금, 2018/06/29 - 1:38오후
저는 지금 포트를 두 개 열어서 하는 시스템에서 들어오는 값 처리 , 다른 포트는 http 에서 들어오는 값을 그대로 보내주는 에코 서버를 개발 중에 있습니다.
소스중에 printf 를 찍은 것들은 전부 디버깅 용으로 찍은 함수 입니다.
지금 , h_clnt_sock=accept() -> 하는 부분에서 큰 문제가 발생 하였습니다.
자꾸 클라이언트 소켓에 할당대는 값이 0이 나옵니다.
(0이 표준 입력 , 1이 표준출력 , 2가 표준에러로 알고 있습니다.)
0이 클라이언트 소켓 값으로 할당됨으로써 read/write가 안되고 있습니다.
서버 소켓에 5가 할당되었다면 클라이언트 소켓은 6이 할당되어야 하는게 보통 경우인데..
int fd = open("/dev/null", O_RDONLY); dup2(fd, STDIN_FILENO); close(fd);
를 accept 하기 윗 단에 쓰라고 하던데..
저는 써도 똑같은 오류가 발생해서요.
해당 오류 관련해서 조언 및 해결 방안 부탁 드립니다.
void *HttpSock(void *prma) { signal(SIGINT,keycontrol); int h_serv_sock; int h_clnt_sock; int h_clnt_size; pthread_t http; struct sockaddr_in h_serv_adr,h_clnt_adr; HttpSockSet(&h_serv_adr,&h_serv_sock); //소켓 초기화 해주는 부분 printf("serv sock : %d\n",h_serv_sock); printf("serv adr : %d\n",h_serv_adr); if(bind(h_serv_sock,(struct sockaddr*)&h_serv_adr,sizeof(h_serv_adr))==-1) ErrorHandle("HTTP Bind() Error!"); else SuccessMessage("HTTP Bind() Success!"); if(listen(h_serv_sock,20)==-1) ErrorHandle("HTTP listen() Error!"); else SuccessMessage("HTTP listen() Success!"); while(1) { h_clnt_size=sizeof(h_clnt_adr); int fd = open("/dev/null",O_RDONLY); dup2(fd,STDIN_FILENO); close(fd); if(h_clnt_sock=accept(h_serv_sock,(struct sockaddr*)&h_clnt_adr,&h_clnt_size)==-1) ErrorHandle("HTTP Accept Error!"); else SuccessMessage("HTTP Accept Surccess!"); printf("clnt_sock : %d\n",h_clnt_sock); int debug=pthread_create(&http,NULL,HTTP_Read_Write,(void*)&h_clnt_sock); if(debug!=0) ErrorHandle("Http pthread Error!"); else SuccessMessage("Http pthread Success!"); } close(serv_sock); }
Forums:
HttpSockSet 함수는 어떻게 구현되어 있나요?
HttpSockSet 함수는 어떻게 구현되어 있나요?
h = accept(...) == -1
h = accept(...) == -1
이미 알고 계실지도 모르지만, libevhtp 한번
이미 알고 계실지도 모르지만, libevhtp 한번 써보세요. 강추합니다. :)
---------------------------------
제일 왼쪽이 저입니다 :)
댓글 달기