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