2017-01-23 6 views
0

私がテストからやろうとしているのは、socket.on('error',() => {...})で捕まえるべきETIMEDOUTをシミュレートすることです。私が使用しているサードパーティ製のTCPサーバーを使った実際の言葉では、ETIMEDOUTは常にerrorイベントによってキャッチされます。私のテストでもこの状況を模倣したいと思います。 tlsドキュメントを通って行く、この目的のために使用することができる唯一の候補者がsocket.setTimeoutですが、それは私がそれを期待する方法は動作しません:ノードtls、シミュレートソケットETIMEDOUT

describe('TCP timeout',() => { 
    const TIMEOUT_AFTER_IN_MILLISECONDS = 1 
    const socket = getActiveSocketFromSomewhere() 

    it('should simulate timeout',() => { 
    socket.setTimeout(TIMEOUT_AFTER_IN_MILLISECONDS,() => { 
     console.log('are we here') 
    }) 

    /** 
    * This will trigger socket communication 
    * with dummy TCP server where socket from 
    * above will be used 
    */ 
    return something() 
    ... 
    }) 
}) 

コンソールから私は14msのための答えを待っているとことをしていることがわかりますsetTimeoutに提供されるコールバックが実行されましたが、私はTCPサーバからの応答を受信して​​いることがわかります後:

are we here 
{ result: 'success', ... } 

答えて

0

行動がどのようにはい、それはです。
タイムアウトに達すると、ソケットは明示的に終了しません。これは明らかに文書で言及されていて、ソケットを終了したい場合は、timeoutイベントがトリガされた後、手動socket.end()またはsocket.destroy()を呼び出す必要があり、それは
https://nodejs.org/dist/latest-v6.x/docs/api/net.html#net_socket_settimeout_timeout_callback

を運命づけされるたびに応答を受信します

コード:

socket.on('timeout',function(){ 
    socket.end(); 
}) 
+0

socket.end()のdoesntネットソケットに存在し)、それはsocket.close(あるNode.jsの – wetlip

関連する問題