服务器应用程序中的文件描述符问题

时间:2013-10-28 19:57:25

标签: c http streaming posix file-descriptor

Curretly我正在开发一个项目,我正在使用一个小型的C应用程序,我发现它可以将视频流式传输到HTML5-GUI。

I found the source code on this blog

对于一些基本的东西,这段代码工作正常。我唯一想改变的是从另一个文件中读取视频文件的文件大小。因此我在C:

中读取文件
char file_buf[32];
input = fopen("size.dat", "r");
fgets(file_buf, 32, input);
num_chunks = atoi(file_buf);
videosize = (num_chunks-1)*1024;
fclose(input);
printf("videosize: %d",videosize);

现在,我收到一个“错误的文件描述符”错误,即使我不替换其他任何代码。这有什么问题?

编辑:越来越多地测试应用程序,错误似乎很随机....任何想法?

Edit2:应该接受套接字时发生错误。代码看起来像这样:

if((socketfd = socket(AF_INET,SOCK_STREAM,0))==-1){
        printf("Socket creation failed!\n");
    }
printf("Socket Creation: %s\n",strerror(errno));

bzero(&sockserv,sizeof(sockserv));

sockserv.sin_family = AF_INET;
sockserv.sin_addr.s_addr = INADDR_ANY;
sockserv.sin_port = htons(8080);

if(bind(socketfd,(struct sockaddr *)&sockserv,sizeof(sockserv))<0)
    {
    printf("Error binding the socket\n");
    }
printf("Socket Bind: %s\n",strerror(errno));

if(listen(socketfd,1) == -1){
printf("Listening to Socket failed \n");
}
printf("Socket Listen: %s\n",strerror(errno));

clientfd = accept(socketfd,(struct sockaddr*) &sockclient,&clientsocklen);
if(clientfd  < 0){
    printf("Accepting Socket failed!\n");
}

那里可能出现什么问题?

祝你好运, PG

1 个答案:

答案 0 :(得分:0)

我猜您的问题是由于重新启动应用程序时绑定地址未正确重用。看看SO_REUSEADDR选项。具体来说,您应该使用bind()在<{1}}之前设置它。