我正在编写一个代理SSL连接的代理服务器,它对于正常流量来说都非常好。但是,如果有大量文件传输(超过20KB),如电子邮件附件,则在文件写入完成之前,将在TCP级别重置连接。我正在使用非阻塞IO,并为每个特定连接生成一个线程。
当连接进来时,我会执行以下操作:
就像我说的,这对于正常大小的数据(常规网页和其他东西)非常有用,但是一旦文件太大而导致错误代码(取决于所使用的webapp)或错误:连接就会失败中断。
我不知道导致连接关闭的原因是什么,无论是TCP,HTTP还是SSL特定的,我根本找不到任何关于它的信息。在某些浏览器中,如果我在SSL_write之后立即放置一个sleep语句,它将开始工作,但这似乎会在其他浏览器中引起其他问题。睡眠不一定很长,真的只是一个延迟。我目前将它设置为每次写入4毫秒,每次读取2毫秒,这完全修复了旧的firefox,带有HTTP上传的chrome和opera。
任何线索都将不胜感激,如果您需要更多信息,请与我们联系。先谢谢!
萨姆
答案 0 :(得分:0)
如果网络应用认为上传的文件太大,它会做什么?如果它有权关闭连接,那将导致发送方的ECONN:'connection reset'。无论它做什么,当您编写代理时,并且假设您的代码中没有导致此问题的错误,您的任务是反映下游连接中发生的上游连接。在这种情况下,答案就是做你正在做的事情:关闭上游和下游套接字。如果您从服务器获得了传入的close_notify,请在客户端附近执行有序的SSL;如果你有ECONN,只需直接关闭客户端套接字,绕过SSL。