First, I'm still learning C++, and to do so, I'm creating a libcurl binding for 
nodejs.

The code is on github: https://github.com/JCMais/node-libcurl

This is mostly about the code in the multi handler socket callback: 
https://github.com/JCMais/node-libcurl/blob/develop/src/Curl.cc#L267


When a connection timeout, and libcurl tries to make another request to the 
next ip, libuv gives a error saying that the handle is being closed, see:

>node examples\simple-request.js www.google.com:81
* Rebuilt URL to: www.google.com:81/
* Hostname was NOT found in DNS cache
*   Trying 200.149.119.118...
Action: 2
Socket: 00000000
* After 2390ms connect time, move on!
* connect to 200.149.119.118 port 81 failed: Timed out
*   Trying 200.149.119.89...
Action: 4
Socket: 006A0898
Action: 2
Socket: 00000000
Assertion failed: ((handle)->flags & UV__HANDLE_CLOSING) == 0, file 
src\win\poll.c, line 190
-----------------------------------------------------------


This error only occurs on Windows, interesting enough, on Linux, the order in 
which the socket callback is called is inverted, that is, first it receives a 
CURL_POLL_OUT before the CURL_POLL_REMOVE.

$ node examples/simple-request.js www.google.com:81
* About to connect() to www.google.com port 81 (#0)
*   Trying 200.149.119.123...
* 0x2d41980 is at send pipe head!
* STATE: CONNECT => WAITCONNECT handle 0x2cebdf0; (connection #0)
Action: 2
Socket: 0
* After 2407ms connect time, move on!
*   Trying 200.149.119.98...
Action: 2
Socket: 0
Action: 4
Socket: 0x2d4d260
* After 1203ms connect time, move on!
*   Trying 200.149.119.94...
Action: 2
Socket: 0
Action: 4
Socket: 0x2d4d370
* After 600ms connect time, move on!
*   Trying 200.149.119.114...
Action: 2
Socket: 0
Action: 4
Socket: 0x2d4d260
* Connection timed out after 5040 milliseconds
* STATE: WAITCONNECT => COMPLETED handle 0x2cebdf0; (connection #-5000)
* STATE: COMPLETED => MSGSENT handle 0x2cebdf0; (connection #-5000)
Action: 4
Socket: 0x2d4cab0
* Closing connection #0
Err:  [Error: Timeout was reached]
Code:  28
-----------------------------------------------------------

I'm using this "gypified" version of libcurl: 
https://github.com/peters/curl-for-windows
                                          
-------------------------------------------------------------------
List admin: http://cool.haxx.se/list/listinfo/curl-library
Etiquette:  http://curl.haxx.se/mail/etiquette.html

Reply via email to