소켓에서 바인딩 하는데 에러가
글쓴이: 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
댓글 달기