클라이언트 쪽에서 블록킹 상태가 되버립니다..

ing의 이미지

소켓프로그래밍 책을 보고 공부를 하고 있습니다..
아주 간단한 프로그램을 구현하고 있는데요..
클라이언트 쪽에서 접속을 하면 서버 쪽에서...

자식프로세스(서버 쪽)에서 클라이언트 쪽으로 문자열을
보내는데요...

소스 일부분..

자식프로세스 소스 일부분..

 write(client_sock, lpMainString, sizeof(lpMainString));
        read(client_sock, chBuffer, BUFSIZE);

클라이언트 부분 소스 일부분..

nStrLen = read(sock, chMessage, BUFSIZE-1);
       chMessage[nStrLen] = 0;
       fputs(chMessage, stdout);
       fflush(stdout);

일부분의 소스 입니다..
이렇게 구현하면 서버측에서 보내온 lpMainString을 클라이언트가 읽어서
출력해야 정상 아닌가요.. 계속 클라이언트 쪽이 블록킹이 걸립니다..
답변 부탁드립니다..아아..

hekimian의 이미지

말씀 하신 내용과 올려주신 소스만으로 판단해보면

client는 BUFSIZE-1 만큼의 data를 읽을 때까지 block되어있습니다.
고로 서버에서 BUFSIZE-1 보다 적은 data를 보내면 client는 계속해서 기다리게 됩니다.

read시에 timeout 시간을 주고 테스트 해보시기 바랍니다.

나를 죽이지 않는 모든 것은 나를 강하게 할 뿐이다.