Open youkinjoh opened 7 years ago
多分原因がわかりました。
node.js上のtimer系の挙動が変更されているのが原因のようです。
setTimeout
やsetInterval
は以前はブラウザと同じように数値を返していましたが
現在のnode.jsではTimeout
オブジェクトを返しているようです。
console.log(setTimeout(function() {}, 0).constructor); //=> [Function: Timeout]
console.log(setInterval(function() {}, 0).constructor); //=> [Function: Timeout]
すいません。日本語で。
startDiscovery
実行後、 まだM-Search
のretryが終了していないうちにstopDiscovery
をcallした場合、 エラーが発生し落ちてしまいます。M-Search
のretryのためにここのsend
が繰り返し実行されています。 https://github.com/futomi/node-upnp-utils/blob/35fbccb1ccdea088d3ca62e174ae9f818bb22f9b/lib/node-upnp-utils.js#L344send
の中でさらにcallしている_sendMsearch
では、unicast
を取得し次の行でsend
をcallしています。 https://github.com/futomi/node-upnp-utils/blob/35fbccb1ccdea088d3ca62e174ae9f818bb22f9b/lib/node-upnp-utils.js#L475stopDiscovery
実行時にはmulticast
とunicast
のcloseと削除(正確にはnull
を代入)が行われています。 https://github.com/futomi/node-upnp-utils/blob/35fbccb1ccdea088d3ca62e174ae9f818bb22f9b/lib/node-upnp-utils.js#L574この場合でも、
_sendMsearch
は繰り返しcallされているため、null
となっているunicast
を取得しsend
をcallしてエラーとなっています。this.discovery_started
を見て処理にガードするのが良さそうですが、_startMsearch
内のsend
で行うべきか_sendMsearch
内で処理すべきか判断がつかなかったためpull request
せずにissue
に登録します。