소켓에서 바인딩 하는데 에러가
글쓴이: hitman7 / 작성시간: 월, 2006/03/06 - 10:58오전
소스는 아래와 같습니다.
그냥 클라이언트에서 접속만 하고 있습니다. (기본 구조만 테스트 하는중이라서요.)
문제는
1. 서버에서 서버프로그램을 돌립니다.
2. 클라이언트에서 접속을 합니다.
3. 서버 프로그램을 Ctrl-Z 키로 죽입니다.
3-1) 소스를 보시면 알겠지만 Ctrl-z키의 인터럽트를 체크하여 각소켓을 close 하기 때문에 바인드에 문제가 없을것으로 예상되었습니다만.
4. 서버 프로그램을 실행시키면 bind에서 에러가 나타납니다.
에러의 상세내용은
1. bind가 -1을 리턴합니다.
2. strerror가 리턴한 에러코드는 Success입니다. :O
그리고 나서 시간이 지나면 서버프로그램을 돌리는데 문제는 없습니다만, 왠지 꺼림직해서 다른일이 안잡히네요. 명쾌한 설명 부탁드릴수 있을까요?
#include <stdio.h> #include <sys/socket.h> #include <arpa/inet.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <string.h> #include <sys/types.h> #include <netinet/in.h> #include <sys/wait.h> #include <signal.h> int socket_s,socket_c; void sig_handler(int signum) { close(socket_s); close(socket_c); exit(0); } int main(int argc,char** argv) { int portnum=7575; int err=0; int ret=0; char buf[1]; socklen_t socket_clen; struct sockaddr_in addr_s,addr_c; if(signal(SIGTSTP,sig_handler)==SIG_IGN) { signal(SIGTSTP,SIG_IGN); } socket_clen=sizeof(addr_c); socket_s=socket(AF_INET,SOCK_STREAM,0); if(socket<0) { printf("error - while create socket\n"); return 0; } bzero(&addr_s,sizeof(addr_s)); addr_s.sin_family=AF_INET; addr_s.sin_addr.s_addr=htonl(INADDR_ANY); addr_s.sin_port=htons(portnum); // bind(socket_s,(struct sockaddr*)&addr_s,sizeof(addr_s)); if((ret=bind(socket_s,(struct sockaddr*)&addr_s,sizeof(addr_s)))<0) { printf("bind error!(%d):%s\n",ret,strerror(err)); return 0; } // listen(socket_s,5); if(listen(socket_s,5)!=0) { printf("listen error!(%d):%s\n",err,strerror(err)); return 0; } while(1) { socket_c=accept(socket_s,(struct sockaddr*)&addr_c,&socket_clen); printf("here comes new challenger!\n"); scanf("%c",&buf); if(buf=="q") { close(socket_s); close(socket_c); exit(0); } } return 0; }
Forums:
BBCode tags가 안먹히네욤. 소스 첨부합니다.
far and hard way
far and hard way
SO_REUSEADDR 소켓
SO_REUSEADDR 소켓 옵션에 대해서 책을 참고하시기 바랍니다.
감사합니다.
부탁드린대로 명쾌한 설명이 되었습니다...^^;;
감사합니다.
-------------------------------------------
far and hard way
far and hard way
댓글 달기