[SOLVED] 리눅스 클라이언트 측 소켓 확인
글쓴이: owcred601 / 작성시간: 수, 2016/12/07 - 6:28오후
안녕하세요. 클라이언트 측에서 서버 소켓을 확인하는 방법이 궁금합니다.
리눅스 환경에서 c++로 작성해야 합니다..
자바의 경우, Exception 처리를 이용했었던 것으로 기억하는데, C와 C++에서는 어떻게 해결할 수 있나요?
계속해서 connect() 함수의 결과를 확인하는 A 쓰레드
서버에서 데이터를 읽어들이는 B 쓰레드
를 만들고,
A 쓰레드에서는
connect() 값이 0 이거나 -1의 경우, 연결이 종료되었으므로, 다시 fd = socket() 으로
소켓을 생성하고 connect() 하고,
그리고 B 쓰레드는
read() 함수를 이용해서 서버에서 내용을 읽어들이면 될 것 같습니다.
그런데 서버가 갑자기 죽을 경우에 A 쓰레드와 B 쓰레드 간 통신에 대한 방법을 잘 모르겠습니다.
-----------------------------------------------------------------------------------------------------------
작성하다가 든 생각인데, 쓰레드 하나에서 While 2개를 사용해, 안쪽의 While에서 read() 하다가 값이 이상할 때, 나와서 바깥의 While 로 다시 connect() 하는 방식을 사용하면 문제가 될까요?
Forums:
말씀하신데로 단순히 계속 Read만 할 것 같은
말씀하신데로 단순히 계속 Read만 할 것 같은 동작이라면 굳이 thread를 만드실 필요는 없어보입니다.
즉 하나의 프로세스 내에서 read를 계속 하다가 fail이 나면 경우에 따라서 소켓을 정리하고 다시 연결을 시도하는 로직으로 작성해보시면 될 것 같습니다.
감사합니다.
방법이 하나 더 있었습니다.
signal() 함수를 이용해서, 해당 이슈가 발생했을 때, 인터럽트를 줄 수 있는 방법이 있더라구요.
그래서 signal 들어왔을 때, 함수를 하나 등록하고 등록한 함수에서 소켓을 끊고 다시 연결하도록 했습니다.
답변 주셔서 정말 감사합니다.
다른 일 하다가 다시 잡았는데, 답변이..^^ 감사합니다. 연말 잘 보내세요~
어쩔 도리가 없는 경우가 아니라면 signal 을
어쩔 도리가 없는 경우가 아니라면 signal 을 사용해서 뭘 하는 경우는 거의 없습니다.
signal safe 를 따져야해서요.
댓글 달기