标签: timeout

如何确定数据何时在 SSL 套接字上完成

我正在编写一个应用程序,该应用程序创建多个到 https 服务器的非阻塞 SSL 连接,在每个连接中我发送一个请求并读取服务器的响应。我的问题是,无论我做什么,我都无法确定响应数据何时完成。这是我负责发送和接收数据的代码的一部分:

....
fd_set connectionfds;
struct timeval timeout2;
FD_ZERO(&connectionfds);
FD_SET(socket_server, &connectionfds);
timeout2.tv_usec = 0;
timeout2.tv_sec = 1;
while(1)
{
    r=BIO_read(io,buf,BUFSIZZ-1);
    if (r>0){
        //gather data
        continue;
    }
    else if (SSL_get_error(ssl, r)==SSL_ERROR_WANT_READ){
        int ret = select(socket_server + 1, &connectionfds, NULL, NULL, &timeout2);
        if (ret <= 0){
            break;
        }
        continue;
    }
    else{
        break;
    }
}
// use whole gathered data
....
Run Code Online (Sandbox Code Playgroud)

我上面代码的问题是,如果我将 select timeout 设置的时间很短,我不能保证接收到所有数据(因为有些服务器真的很慢),如果我将超时设置为很长的时间(5-10 秒) ),我的套接字长时间处于等待状态,在此之前我无法使用响应。我试图通过使用“BIO_should_read()”或“BIO_pending()”函数来完成这项工作,但它们都没有给我想要的东西。那么,有没有办法确定什么时候在 SSL 套接字上没有其他东西可以读取?

c sockets ssl select timeout

1
推荐指数
1
解决办法
1246
查看次数

Mule - HTTP Post - 超时超时

这是我的基础mule flow:

HTTP Listener> Logger> Http Request> Logger(结果消息)

<http:request-config name="HTTP_Request_Configuration" host="localhost" port="8080" doc:name="HTTP Request Configuration" usePersistentConnections="false"/>
<http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8081" doc:name="HTTP Listener Configuration"/>
<flow name="servoy-restFlow">
    <http:listener config-ref="HTTP_Listener_Configuration"
        path="/" doc:name="HTTP" />
    <logger message="#[message.payloadAs(java.lang.String)]" level="INFO"
        doc:name="Logger" />
    <http:request config-ref="HTTP_Request_Configuration"
        path="service/rest/request" method="POST"
        doc:name="HTTP" />
    <logger message="#[message.payloadAs(java.lang.String)]" level="INFO"
        doc:name="Logger" />
</flow>
Run Code Online (Sandbox Code Playgroud)

但它返回有关超时异常的错误:

********************************************************************************
Exception stack is:
1. Timeout exceeded (java.util.concurrent.TimeoutException)
  com.ning.http.client.providers.grizzly.GrizzlyAsyncHttpProvider:426 (null)
2. Error sending HTTP request. Message payload is of type: String (org.mule.api.MessagingException)
  org.mule.module.http.internal.request.DefaultHttpRequester:287 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/MessagingException.html)
********************************************************************************
Root …
Run Code Online (Sandbox Code Playgroud)

post timeout http httprequest mule

1
推荐指数
1
解决办法
9446
查看次数

Node.js的Heroku H12超时错误

目前,我正在使用Node hapijs框架开发REST API .API部署在Heroku上.

API中有一个GET端点,它发出get请求以从第三方检索数据并在发送回复之前处理数据.此特定端点不时超时.当端点超时时,Heroku返回H12错误.一旦超时,对该端点的后续请求将导致H12错误.我必须重新启动Heroku上的应用程序才能使该端点再次运行.API中的任何其他端点都不会受到此错误的任何影响,即使发生错误,也可以继续正常工作.

在我的调试过程中并查看日志,似乎有时候没有从第三方API返回响应,从而导致错误.

我尝试了以下解决方案来尝试解决问题:

  1. 我正在使用请求库来发出请求.因此,我尝试将超时设置为5000毫秒,作为传递给请求的选项的一部分.它有时工作...触发超时并且端点发送与请求关联的超时错误.这是我想要的行为,因为后续的端点请求工作.但是,有时候不会触发请求超时,但Heroku仍然会返回H12错误(总是在30秒后,默认为Heroku).之后,对该端点的后续请求将返回H12错误(也在30秒后).似乎某些进程在Heroku上"卡住",并且在我重新启动应用程序之前不会终止.

  2. 我已经尝试在hapi.js路由配置对象中添加超时.我得到与上面相同的结果.

  3. 我继续做研究,并怀疑这些问题与这里这里给出的描述有关.似乎在应用程序服务器级别设置一个可以向Heroku工作者发送SIGKILL的超时可能会起作用.在Ruby中看起来相当简单,但我找不到有关如何在Node中执行此操作的更多信息.

非常感谢任何见解.我知道向第三方发出请求时可能会发生超时.这不是问题.问题是端点似乎在超时后被"卡住"在Heroku上并且它变得没有响应.

谢谢您的帮助!

api timeout heroku node.js hapijs

1
推荐指数
1
解决办法
2063
查看次数

Bash:如果命令超时,请执行其他操作

我正在执行以下操作:

timeout 180 bash myscript.txt
Run Code Online (Sandbox Code Playgroud)

myscript.txt应该在不到180秒的时间内完全执行。如果不是,我希望执行紧急脚本.txt。有可能这样做吗?

喜欢

timeout 180 [bash myscript.txt] [bash emergencyscript.txt]
Run Code Online (Sandbox Code Playgroud)

bash timeout

1
推荐指数
1
解决办法
3006
查看次数

setTimeout立即运行,而不是等待延迟值

我完全不解.为什么这个程序没有使用我得到的延迟编号,我将其命名为"结果".它应该按用户发布的未来日期减去当前时间.这最终会成为一种警报.看看,运行代码.

            // Set a future time you want the alert() function to go off
            var eta_ms = new Date(2017, 1, 26, 17, 06).getTime();
    
            document.write(Date.now() + "<br />");
            document.write(eta_ms + "<br />");
    
            var result = eta_ms - Date.now();
            document.write("The Delay: " + result + "<br />" );
            document.write(result + "<br />");
            document.write(typeof (result) + "<br />");
    
            setTimeout(function(){ alert("Hello"); }, result);
Run Code Online (Sandbox Code Playgroud)

javascript time timeout alarm

1
推荐指数
1
解决办法
218
查看次数

没有setTimeout的vue单击动画

我希望div闪烁,以防用户单击它。有没有手动运行setTimeout的解决方案?

使用setTimeout的解决方案:

app.html

<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.13/vue.js"></script>

<style>
div { transition: background-color 1s; }
div.flashing { background-color: green; transition: none; }
</style>

<div id="app" :class="{'flashing':flashing}" v-on:click="flash">flash when clicked</div>
Run Code Online (Sandbox Code Playgroud)

app.js

const data = { flashing: false }

new Vue({
  el: '#app',
  data,
  methods: { flash }
})

function flash() {
  data.flashing = true;
  setTimeout(() => data.flashing = false, 100);
}
Run Code Online (Sandbox Code Playgroud)

Js Fiddle:https : //jsfiddle.net/ang3ukg2/

javascript animation timeout vue.js

1
推荐指数
1
解决办法
2744
查看次数

如何在Apache HttpClient 4.5中设置默认超时?(流利)

我在Java控制台应用程序中使用Apache HttpClient 4.5(具有流畅的界面)。我注意到,它的默认超时值似乎是无限的,但是我必须对发送的请求使用非无限的超时值。我想对所有请求使用相同的超时值。

如何全局设置默认的连接超时和套接字超时值,这样我就不必在发送请求的代码中的每个位置都设置它们?(请记住我使用的是流畅的界面)


例:

现在,在代码中我发送请求的每个地方,我都会做类似的事情:(简单的示例)

HttpResponse response = Request.Get(url)
   .connectionTimeout(CONNECTION_TIMEOUT) // <- want to get rid of this
   .sessionTimeout(SESSION_TIMEOUT)       // <- and this
   .execute()
   .returnResponse();
Run Code Online (Sandbox Code Playgroud)

我想做的是在程序开始时一劳永逸地设置默认值。就像是:

SomeImaginaryConfigClass.setDefaultConnectionTimeout(CONNECTION_TIMEOUT);
SomeImaginaryConfigClass.setDefaultSessionTimeout(SESSION_TIMEOUT);
Run Code Online (Sandbox Code Playgroud)

这样我就可以发送这样的请求

HttpResponse response = Request.Get(url).execute().returnResponse();
Run Code Online (Sandbox Code Playgroud)

而无需在每个调用中都设置超时参数。

我在网上看到了一些答案,但是它们要么用于Apache HttpClient的旧版本(即不起作用),要么它们谈论使用生成器或将config类传递给其他方法,而这些方法对于我的需求而言过于复杂。我只想设置默认超时值,没有比这更好的了。我在哪里做?

java timeout apache-httpclient-4.x

1
推荐指数
1
解决办法
2158
查看次数

如何增加Android中改装库的上传时间

我正在使用改造库将文件上传到服务器。上传文件时显示error:: timeout。如何增加上传时间,以便我可以在服务器中上传完整文件。

android timeout file-upload retrofit retrofit2

1
推荐指数
1
解决办法
552
查看次数

在套接字上设置超时不起作用

我正在使用该setsockopt()函数在函数上设置超时recvfrom().由于我使用的协议,我必须首先超时2秒,然后4,6,直到最大.但是当我使用该功能时,它似乎有0.01秒的超时,因为它无需等待即可发送8个数据包.

//more variables and code here
struct timeval timeout = {2,0};

while(1){
  setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char*)&timeout, sizeof(struct timeval));
  temp2 = recvfrom(sock, &buff, sizeof(buff), 0, (struct sockaddr *)&addr_server, sizeof(addr_server));

  if(temp2 < 0){ /* Timeout excedit (exceeded)*/
      temp = sendto(sock, (struct udp_PDU*)&reg_pdu, sizeof(reg_pdu), 0, (struct sockaddr *)&addr_server, sizeof(addr_server));
      if(temp == -1){
        printf("Error sendTo \n");
        exit(-1);
      }
      packet_counter++;
      debug("Enviat paquet REGISTER_REQ");
      if(packet_counter == 8) break;
      if((interval * max) > t ) timeout.tv_sec+=interval;

  }else{ /* s'han rebut dades (they have …
Run Code Online (Sandbox Code Playgroud)

c sockets udp timeout

1
推荐指数
1
解决办法
76
查看次数

如何在Perl中为长时间运行的Sybase SP设置超时

我正在调用一个存储过程,该存储过程将从Perl中的Sybase DB中删除数据。但是sp需要几个小时才能完成。我只希望sp运行1个小时,然后无论它是否完成,我都希望以后的代码能够运行。我该如何实施?

sub DelRef {
    print "starting defRefData\n";
    $db = new Sybapi($user, $password, $server, $margin_database); 
    #the following sql will take hours
    $db->exec_sql("exec CPN_Margins..clean_up_refData_db '$XrefCode'");
}

&DelRef();
print "process is done\n";
$db->close();
Run Code Online (Sandbox Code Playgroud)

perl sybase timeout

1
推荐指数
1
解决办法
68
查看次数