클라이언트 소켓이 종료하면 서버 소켓도 종료가 되네요.ㅠㅠ
서버와 클라이언트가 통신을 주고 받습니다. 근데 서버 프로그램이 클라이언트 연결을 끊으면 무조건 종료가 되요.ㅠㅠ
int main(int argc, char** argv)
{
int serv_sock;
int clnt_sock;
int str_len;
char message[BUFSIZE];
struct sockaddr_in serv_addr;
struct sockaddr_in clnt_addr;
int clnt_addr_size;
if(argc != 2)
printf("Usage : %s \n", argv[0]);
serv_sock = socket(PF_INET, SOCK_STREAM, 0);
if(serv_sock == -1)
printf("socket() error");
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(atoi(argv[1]));
if(bind(serv_sock, (struct sockaddr*) &serv_addr, sizeof(serv_addr)) == -1)
printf("bind() error");
if(listen(serv_sock, 5) == -1)
printf("listen() error");
clnt_addr_size = sizeof(clnt_addr);
clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size);
if(clnt_sock == -1)
printf("accept() error");
//while((str_len = read(clnt_sock, message, BUFSIZE)) != 0)
while(1)
{
str_len = read(clnt_sock, message, BUFSIZE);
write(clnt_sock, message, str_len);
write(1, message, str_len);
}
close(clnt_sock);
return 0;
}
왜 while문으로 무한 루프 돌려놓았는데 클라이언트 연결을 끊으면 종료가 될까요?
SIGPIPE가 발생해서
SIGPIPE가 발생해서 그런것 같은데요. SIGPIPE를 무시하거나 적당히 처리해보세요.
당연한 것입니다.
Client 쪽에서 연결을 끊었는데
무슨 방법으로 Server가 데이타를 보내고 받을 수가 있겠습니까?
당연히 에러가 나겠죠.
그러면 어떻게 일을 마칠때까지 연결을 유지하냐고요?
클라이언트에서 다 받고 나서 끊으면 됩니다.
댓글 달기