소켓에서 데이터를 읽으려는 C 코드를 작성하려고하는데 데이터가 들어오는 길이를 알지 못합니다. 데이터를 제어 할 수 없습니다. 보내는 사람.소켓 읽기 및 알 수없는 길이 데이터
알 수없는 길이를 사용하여 소켓 읽기를 읽을 수있는 방법이 있습니까?
다음은 내가 작성한 코드이지만 read()
에 있습니다. 이 경우
static void
process_command (int fd) {
fprintf (stderr, "process_command\n");
char *buffer = (char *) malloc (sizeof (char) * SIZE_TO_READ);
int n = 0;
while (1) {
fprintf (stderr, ".");
n = read (fd, buffer, SIZE_TO_READ);
fprintf (stderr, "bytes read = %d \n", n);
if (n <= 0 || n == -1)
break;
buffer = (char *) realloc (buffer, n + SIZE_TO_READ);
}
char * p = strchr (buffer, '\n');
if (p) *p = '\0';
fprintf (stderr, "-----> %s\n", buffer);
if (buffer) free (buffer);
}
FD
은 그냥 몇 가지 블록 (버퍼)는 0을 반환하거나 프로토콜에 따라 데이터의 끝이 있음을 볼 때까지 읽을 FILENO_STDIN
'realloc()'의 결과를 인수와 동일한 변수에 대입하는 것은 안전하지 않습니다. 왜냐하면 할당이 실패 할 수 있기 때문입니다 (이 경우 이전 버퍼가 유출됩니다). 또한'strchr()'을 사용하면 나에게 안전하지 않은 것처럼 보입니다. –
감사합니다. 그걸 수정합니다 – Avinash