Socket 프로그래밍시 Read 가 되지 않는 문제에 관해 질문 드립니다.
글쓴이: icbm465 / 작성시간: 목, 2009/07/23 - 8:56오후
현재 main 함수에서 thread를 생성하여 다음 코드를 수행합니다.
clnt_socck를 찍어 보아도 main과 동일한 값이 출력되어 socket 생성에는 별다른 이상이 없어 보이는데...
데이터를 강제로 message 배열에 넣어도 read 함수가 호출 되지를 않습니다.
리턴 값을 찍어 보려 했는데 아얘 출력되지도 않고요..
고수님들의 답변 부탁 드립니다. (__)
void *thread_read(void *arg)
{
printf("Thread Running\n");
int clnt_sock= (int)arg;
int str_len=0;
char message[BUFSIZE];
printf(" Size of Message %d \n", clnt_sock);
while( (str_len=read(clnt_sock, message, strlen(message))) != 0)
{
printf("Recieved Message From Socket :%s\n", message);
strcpy(message, "asdfsadasd");
send_message(message, str_len);
}
close(clnt_sock);
return 0;
}
Forums:
read함수의 정확한 용법에 대해 man page혹은 메뉴얼을 참고하시길
while( (str_len=read(clnt_sock, message, strlen(message))) != 0)
에서 read는 몇 byte를 읽을까요? strlen(message)는 초기화되지 않은 messsage char 배열에 대해
strlen()을 호출하고 있으므로 무슨 값이 튀어나올지 모릅니다. sender에서 10bytes를 보냈는데
위 read에서 20bytes를 읽으려고 하는 경우 20bytes가 올 때 까지 계속 block되 있지요.
물론 socket에 대한 아무 언급이 없어 blocking i/o로 가정한 것이긴 합니다.
이 Q&A에서 socket으로 검색해 보셔도 해답을 구하실 수 있는 글들이 보일 듯 합니다.
그럼...
댓글 달기