UNIXソケットを使用してサーバーからhtmlファイルをダウンロードする簡単なプログラムを作成します。
write()を使用して "Get /index.html Host:* "メッセージを送信し、whileループを使用してread()応答を送信します。すべてうまくいきますが、0を返す最後のread()は、戻るのに長い時間がかかります。この特別な時間を待つ必要がないようにコードを修正するアイデアはありますか?またはこれはどのように起こりましたか?
sprintf(cmdstr,"%s %s %s\r\nHOST:%s\r\n\r\n",METHOD,place,VERSION,host);
cmdlen = strlen(cmdstr);
if (write(sockfd,cmdstr,cmdlen) != cmdlen) {
perror("write cmd error");
return ;
}
while ((n = read(sockfd,read_data,BUFSIZE)) > 0) {
read_data[n] = 0;
p = read_data;
if (filep == NULL) {
if (filep = fopen(filename,"w")) == NULL) {
perror("fopen ");
return;
}
p = strstr(read_data,"\r\n\r\n");
p += 4;
}
fputs(p,filep);
}
printf ("%s download completed.\n",filename);