소켓 기초프로그래밍중에 요상한 에러가...있습니다.
글쓴이: yakur / 작성시간: 화, 2005/02/01 - 11:33오후
#include <sys/types.h> #include <sys/socket.h> #include <sys/wait.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #define MYPORT 5002 #define saram 10 main() { char buf[10]; int sf,nf,sin_size; struct sockaddr_in my_addr; struct sockaddr_in to_addr; if((sf=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=inet_addr("210.102.139.250"); bzero(&(my_addr.sin_zero),8); if(bind(sf,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))==-1) { perror("bind"); exit(1); } if(listen(sf,saram)==-1) { perror("listen"); exit(1); } //close(0); while(1) { sin_size=sizeof(struct sockaddr_in); if((nf=accept(sf,(struct sockaddr *)&to_addr,&sin_size) == -1)) { perror("accept"); continue; } printf("server: got connection from %s[%d]\n", inet_ntoa(to_addr.sin_addr), nf); if (!fork()) { if (send(nf,"안녕?\n",10,0)==-1) perror("send"); close(nf); exit(0); } close(nf); while (waitpid(-1,NULL,WNOHANG) > 0); } }
안녕하세요? 매일 글만 읽다 올리는건 첨이네요 헤헤
이번에 첨 소켓 프로그래밍 공부하면서 beeJ 라는 문서보고 하고 있는데요/
거기 예제를 해보니까
요렇게 코드를 써서 실행시키면 처음 접속할때
send: Socket operation on non-socket
이라고 에러가 납니다. 그러나 그 이후에 텔넷에서 접속하면 정상적으로 "안녕?"
이 출력되고요 소켓지시자 nf (accept에 연결된) 을 출력해보면 0 이 출력되는데
제생각에는 0번이 프로세스에서 표준 입력 지시자?! 라고 알고있는데요.
프로세스가 활용하는 것을 소켓에서 쓰려고 해서 이런문제가 발생하는걸까
추정하고 close(0); 을 써서 아예 0을 nf 가 쓸수있게 미리 닫아놨더니 제대로 되더라구요.
이런 방법 말고 정확히 왜그런지 그리고 어떻게 해결할수 있는지 알고 싶네요.
이렇게 처리해버리면 소켓 안에서 표준입력이 않먹어요 ㅠㅠ
그리고 환경 문제인줄 알았는데 다른 유닉스 환경에서 컴파일해도 마찬가지더군요. OTL
[/code]
Forums:
[quote] if((nf=accept(sf,(struct socka
요부분은
로 써야합니다.
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
-_- 제가 바보였군요.
이상하다...이상하다... 하면서 어제 4시간째 헤매였던게...
소괄호 하나 문제였다니..
허탈하군요...
ㅠㅠ
답변고맙습니다 ^^
이제와 항상 영원히~
댓글 달기