0

目前我正在做一个项目,我正在使用我发现的一个小 C 应用程序将视频流式传输到 HTML5-GUI。

我在这个博客上找到了源代码

对于一些基本的事情,这段代码可以正常工作。我唯一想改变的是从另一个文件中读取视频文件的文件大小。因此,我正在阅读 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

4

1 回答 1

0

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

于 2013-11-17T00:17:09.797 回答