read()
の戻り値を変数に割り当てていませんが、いつ失敗したかを何らかの形で知るn
ことを期待しています。その割り当てを修正してから、ループロジックを修正して、実際に読み取られたバイトのみを出力するようにします。次に例を示します。n
read()
while(1){
memset(buffer,0,256);
printf("sssssssss\n");
n = read(newsockfd,buffer,256);
if(n<0){
// if your sockeet is non-blocking then uncomment this code...
/*
if ((errno == EAGAIN) || (errno == EWOULDBLOCK)){
fd_set rfd;
FD_ZERO(&rfd);
FD_SET(newsockfd, &rfd);
struct timeval timeout;
timeout.tv_sec = 5;
timeout.tv_usec = 0;
if (select(newsockfd+1, &rfd, NULL, NULL, &timeout) > 0){
continue;
}
}
*/
printf("reading client message failed\n");
return 0;
}
if(n==0){
break;
}
printf("%.*s\n",n,buffer);
printf("succcccccccccccccc\n");
}