Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
选择C不正常工作,它会更改套接字_C_Ubuntu_Select_Server_Wireshark - Fatal编程技术网

选择C不正常工作,它会更改套接字

选择C不正常工作,它会更改套接字,c,ubuntu,select,server,wireshark,C,Ubuntu,Select,Server,Wireshark,我有一个项目,服务器从浏览器接收1个客户端的请求。我应该使连接持久化,使套接字不会随着请求的变化而变化 我必须发送2个文件,html和html上的一个图像,我发送它们没有任何问题,问题是当我查看Wireshark以查看跟踪时,我看到它首先与2个同步数据包建立连接,然后是GET/index.html,但当它结束时,下一个GET还有另一个同步,图像,当select超时时,两个连接似乎都以FIN,ACK结束,我想这是连接的结束,两个GET都是从不同的端口发送的,图像端口是html的+4 当我试着用指纹

我有一个项目,服务器从浏览器接收1个客户端的请求。我应该使连接持久化,使套接字不会随着请求的变化而变化

我必须发送2个文件,html和html上的一个图像,我发送它们没有任何问题,问题是当我查看Wireshark以查看跟踪时,我看到它首先与2个同步数据包建立连接,然后是GET/index.html,但当它结束时,下一个GET还有另一个同步,图像,当select超时时,两个连接似乎都以FIN,ACK结束,我想这是连接的结束,两个GET都是从不同的端口发送的,图像端口是html的+4

当我试着用指纹进行调试时,似乎两份请愿书都是在同一时间提交的,他们都进入了,当他们完成时,没有什么可读的,我认为这是主要的问题,但我不知道

void进程\u web\u请求(int描述符fichero)
{
fd_集rfds;
结构时间值电视;
内部检索;
FD_ZERO(和RFD);
FD_集(描述符fichero和rfds);
tv.tv_sec=20;
tv.tv_usec=0;
而(1)
{    
retval=select(描述符fichero+1,&rfds,NULL,NULL,&tv);
如果(返回)
{
//阅读并处理请愿书。。。
//然后在这里发送给客户
尺寸=斯特伦(按比例);
书写(描述词Fichero,respuesta,l);
而((readsz=read(fdp,buffer,BUFSIZE))>0)
{
写入(描述符fichero、缓冲区、readsz);
}
close(fdp);//我们正在读取的文件中的文件描述符
FD_集(描述符fichero和rfds);
}
其他的
{
关闭(描述符菲切罗);
出口(1);
}
}
}
我知道这段代码有很多地方需要改进,但现在,我想先完成这段代码


编辑:看起来第一个请求是可以的,但是当它在第二次崩溃时执行select()时,中止该进程,另一个不同的进程接受第二个请求。但我不知道它是如何崩溃的。

欢迎光临。正确的代码格式使事情更容易阅读。它还显示您缺少一些
}
。在调用
select
之后,您可能需要查看
tv
rdfs
的内容。特别是如果你在20秒的超时时间内没有收到任何东西,你会怎么想,它会崩溃?如果不重新设置变量,您将很快调用
exit(1)
。BW:您编辑了您的问题,但没有回复当时已经提供的任何评论。因此,只有在你提供反馈的情况下才能很好地工作。