2016-07-06 3 views
0
//nodejs code 

var ip=<some_ip_address>; 
//for me it is 2001:250:401:3611:50c6:6b18:e8f7:f882 

exec('powershell new-netipaddress '+ip+' -InterfaceAlias WLAN',(e,so,se)=>{ 
    http.request({ 
     host:'2404:6800:4005:805::200e',//just use google as an example 
     family:6, 
     localAddress:ip 
    },(res)=>{ 
     console.log('reachable'); 
    }).on('error',(e)=>{ 
     console.log(e); 
    }) 
}).stdin.end(); 

затем выходзапрос nodejs HTTP сразу после добавления нового результата адреса в EADDRNOTAVAIL

{[Error: bind EADDRNOTAVAIL 2001:250:401:3611:50c6:6b18:e8f7:f882] 
code: 'EADDRNOTAVAIL', 
errno: 'EADDRNOTAVAIL', 
syscall: 'bind', 
address: '2001:250:401:3611:50c6:6b18:e8f7:f882' } 

2-й раз (на самом деле я тестирую адрес, так как наш DHCP-без гражданства сломана)

{ [Error: connect ETIMEDOUT 2404:6800:4005:805::200e:80] 
code: 'ETIMEDOUT', 
errno: 'ETIMEDOUT', 
syscall: 'connect', 
address: '2404:6800:4005:805::200e', 
port: 80 } 

я могу рисовать со второго выхода времени,

новый-netipaddress добавил t он адрес правильно, так что обратный вызов работает хорошо (хотя тайм-аут, который мы разработали, чтобы быть)

, но в 1-й раз обратный вызов не удалось с EADDRNOTAVAIL

так, почему он не смог с первого запуска? и как этого избежать?

+0

ли адрес оставить предварительное состояние, когда вы сделали запрос. Это может занять короткое время для повторного обнаружения адресов, и адрес станет доступным для использования. –

+0

@SanderSteffann. Я думаю, что вы правы, но для меня это слишком быстро, чтобы проверить. Я выполняю ('powershell get-netipaddress') в callback, addressState предпочтительнее, а не предварительный ...... Но я считаю, что адрес не может быть использован сразу после добавления, это слишком быстро. так, что я должен сделать, чтобы избежать этого? – wyj

+1

@SanderSteffann резко я нахожу решение. Я вызываю запрос после execSync ('powershell get-netipaddress'), тогда предпочтительнее addressState, и мой запрос может работать. – wyj

ответ

1

благодаря знаниям @SanderSteffann «s по ориентировочному адресу, я думаю о решении, но не может быть очень хорошим

exec('powershell new-netipaddress '+ip+' -InterfaceAlias WLAN',(e,so,se)=>{ 
    http.request({ 
    host:'2404:6800:4005:805::200e',//just use google as an example 
    family:6, 
    localAddress:ip 
},(res)=>{ 
    console.log('reachable'); 
}).on('error',(e)=>{ 
    console.log(e); 
}) 
}).stdin.end(); 


exec('powershell new-netipaddress '+ip+' -InterfaceAlias WLAN',(e,so,se)=>{ 
execSync('powershell get-netipaddress '+ip) 
    http.request({ 
    host:'2404:6800:4005:805::200e',//just use google as an example 
    family:6, 
    localAddress:ip 
},(res)=>{ 
    console.log('reachable'); 
}).on('error',(e)=>{ 
    console.log(e); 
}) 
}).stdin.end(); 

line 2:++++execSync('powershell get-netipaddress '+ip)