read함수에 대한 질문입니다.

ch0nn0m의 이미지

while((str_len=read(clnt_sock, id, sizeof(id))) > 0)
{
         id[str_len]='\0';
}
while((size=read(clnt_sock,passwd,sizeof(passwd)))>0)
{
         passwd[size]='\0';
}
         printf("%s\n",id);
         printf("%s\n",passwd);

클라이언트에서 보내준 문자열을 read로 받아서 id와 passwd라는 배열에 저장했습니다...
그뒤 그 배열들을 출력해보려는데..아무것도 안나오네요...
배열에 저장되어 있는게 아닌건지..?

neogeo의 이미지

몇가지 오류가 있습니다.

1. read 가 id 길이만큼 안올 수 있습니다. ( 예를 들어 첫번째 while 에 str_len 이 sizeof(id) 보다 작을 경우 덮어씌워져서 id 의 일부분만 남게되는 경험을 하시게 될 공산이 높습니다. )

2. 그리고 소켓이 논블럭(non-block) 소켓이면 id / passwd 가 저장이 안 될 수 밖에 없습니다. ( 일단 0 이 리턴 될 확률이 매우매우 높습니다. )

3. 블럭( block ) 소켓이라도 time out 이 걸려있다던가 소켓이 제대로 접속이 안된경우가 있을 수 있습니다.

코드 내용이 일부분만 올라와있으니 판단이 애매하네요. 여하튼 str_len 과 size 를 loop 안에서와 loop 아래에서 번갈아 찍어보시는게 중요할 것 같습니다.

Neogeo - Future is Now.

Neogeo - Future is Now.