求助:我在用linux下用C编写HTTP服务端,发现传送mp3文件时程序崩溃情况。是为什么?
我在用linux下用C编写HTTP服务端,发现传送mp3文件(大概5M)时程序崩溃情况。抓取报文分析是客户端发了FIN报文,应该是其关闭TCP连接导致。gdb也显示收到SIGPIPE信号。但同样的文件,浏览器另存为时,数据传输正常。此程序浏览网页也是正常的。
传输文件的代码如下:
void SendHtmlContent(int client, char * path )
{
FILE *resource ;
char buf[1448];
char ContentType[50] ;
int len ;
GetContentTypeByExName(path , ContentType ) ;
//printf( "\tContentType : %s\n" , ContentType ) ;
resource = fopen( path , "rb") ;
//Get File Size
fseek(resource, 0L, SEEK_END); // go to file end
len = ftell(resource); //Get offset from head
fseek(resource, 0L, SEEK_SET); // go to file head
SendOkHeaders(client) ;
sprintf(buf, "Content-Type: %s\r\n", ContentType);
send(client, buf, strlen(buf), 0);
sprintf(buf, "Accept-Ranges: bytes\r\nContent-Length: %d\r\n",len);
send(client, buf, strlen(buf), 0);
strcpy(buf, "\r\n");
send(client, buf, strlen(buf), 0);
len = fread( buf , sizeof(char) , sizeof(buf) , resource) ;
while (len == sizeof(buf) )
{
if( ( rst = send(client, buf, len, 0) ) == -1 )
{
len= -1 ;
break ;
}
len = fread( buf , sizeof(char) , sizeof(buf) , resource) ;
//usleep(1000);
}
if( len > 0 )
{
send(client, buf, len, 0);
}
fclose(resource) ;
}
完整代码在https://