이것은 숙제 문제가 아닙니다.C - 정리하고 종료 할 다른 스레드에 알리기
난 내가 작성한 클라이언트/서버 쌍을
C.
을 배울 수있는 방법으로 시계열 데이터베이스 구현을 쓰고 있어요. 서버는 현재 포트의 소켓을 수신하는 반향 서버입니다. 클라이언트는 해당 포트에 연결하고 입력 라인을 포트에 보냅니다. 입력을 얻으려면readline
을 사용하고, 클라이언트 소켓에는
send
을, 클라이언트 소켓에는
recv
줄을 입력하고 터미널에 줄을 인쇄합니다. 린스, 반복하십시오. 클라이언트는 을
recv
에서 가져 오면 연결이 닫힌 것을 알 수 있습니다.
readline
이 차단되어 서버 프로세스가 죽으면 (예 : I SIGINT
) 클라이언트가 여전히 readline
에서 차단 중입니다. send
s 이후에 recv
이 EOF
이 될 때까지 서버가 사라 졌음을 알 수 있습니다. recv
즉시 종료에 EOF
이 있다면 클라이언트가 신호를받을 때까지 나는이 발생 할 무엇
이다. 터미널에 대한 네트워크 클라이언트 (send
및 recv
) 1 - 2 내가 할 필요가 생각 무엇
3 pthreads
를 만드는 것입니다. 터미널은 readline
및 블록을 호출합니다. 입력을 받아들이고 pthread_cond_t
을 사용하여 대기 네트워크 클라이언트 send
스레드로 보낼 것을 알립니다. 네트워크 클라이언트 recv
스레드는 항상 recv
입니다. 이는 차단됩니다. EOF
인 경우 SIGINT
, 처리기가 pthread_kill
이고 모든 스레드가 fprintf
인 경우 "Connection closed by server."와 같은 호출을 수행하고 exit
을 호출합니다 (예 : exit
은 모든 스레드를 종료합니다. 청결하고 내가 C를 이해하는지보기 위해서).
이 방법이 적절합니까? 분명히 네트워크 클라이언트 터미널은 항상이 작업을 수행합니다. 올바른 접근 방식은 무엇입니까?
올바른 방법은 없습니다. 고전적인 참고 자료는 Rich Stevens의 [_UNIX Network Programming_]입니다. (http://www.amazon.com/Unix-Network-Programming-Volume-Networking/dp/0131411551) – arayq2
@ arayq2 감사합니다! 나는 그것을 조사 할 것이다! – alyssackwan
"* 입력을 얻기 위해 readline을 사용합니다 ... *" "* it *"은 클라이언트 또는 서버입니까? – alk