소켓 UDP 통신 질문 하나 올리겠습니다
소켓 통신 UDP 를 통하여 데이터가 전송되는 것은 확인하였습니다
그래서 자동으로 클라이언트에서 서버로 데이터를 전송하기 위해 nohup 명령으로 백그라운드로 실행을 시켰습니다
클라이언트는 크론 명령으로 전송을 주기적으로 하였습니다
근데 확인을 해보니 한번만 받고 서버측에서 백그라운드 명령이 종료가 되었습니다. 바인드가 종료된거 같습니다
sock = socket(AF_INET, SOCK_DGRAM, 0); //소켓함수 호출
if (sock == -1)
{
printf("Socket Error!");
return -1;
}
sockaddr_in serveraddr;
memset(&serveraddr, 0, sizeof(serveraddr));
serveraddr.sin_family = AF_INET;
serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
serveraddr.sin_port = htons(9000);
retval = bind(sock, (sockaddr *) &serveraddr, sizeof(serveraddr));
if (retval == -1)
{
printf("Bind Error!");
return -1;
}
sockaddr_in clientaddr;
int addrlen = sizeof(clientaddr);
memset(&clientaddr, 0, sizeof(clientaddr));
retval = recvfrom(sock, (char*)&test, sizeof(test), 0, (sockaddr *)&clientaddr, (socklen_t*)&addrlen);
if(retval == -1)
{
printf("Recv Error");
return -1;
}
위의 내용 처럼 간단하게 저렇게만 해두었습니다.. 한번만 받고 계속 서버측에서 백그라운드 명령이 종료가 됩니다..
어떻게 해결해야할지 몰라 이렇게 질문올립니다
서버코드가 한번만 수행하고 프로그램이 종료처리를
서버코드가 한번만 수행하고 프로그램이 종료처리를 하신거 아닌가요?
위 코드만 보자면 서버는 한번 읽고 프로그램 종료처리가 되는거 같은 느낌이~~~
close(sock)을 없애도 계속 종료가 됩니다..ㅠ 어떻게 종료처리를
안되게 할수 있을까요?ㅠ
고민하시는게 이 부분이 맞을런지(답글에
고민하시는게 이 부분이 맞을런지
(답글에 close(sock)을 적으신걸 봐서. 어플 종료를 고민하시는건지 갑자기 의문이 들어서 ^^)
loop를 추가하시면 서버가 종료되는 현상은 없을겁니다.
게시판내에서 참고하실 글들이 기재되어 있습니다.
(http://kldp.org/node/39193)
while(1) /* server infinite loop */
{
sockaddr_in clientaddr;
int addrlen = sizeof(clientaddr);
memset(&clientaddr, 0, sizeof(clientaddr));
memset(&test, 0x00, sizeof(test));
retval = recvfrom(sock, (char*)&test, sizeof(test), 0, (sockaddr *)&clientaddr, (socklen_t*)&addrlen);
if(retval == -1)
{
printf("Recv Error");
continue;
}
TEST 메시지에 대한 처리....
}/* end of server infinite loop */
댓글 달기