ぶろぐめんどくさい

技術系の記事と漫画レビューが入り混じった混沌

同一UDPポートをバインドできない? SO_REUSEADDRを使おう

通常、TCPと違ってUDPでは同一のポートをバインドすることができる。

はずなんだけど、「『address already in use』ばかり出るよ嘘つき!」な人へ朗報。

SO_REUSEADDRを設定するだけで、この問題が解決する。

具体的にはbind()の前に以下のコードをコピペすればいい。

  u_int yes = 1;
  if(setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes)) < 0) {
    perror("Reusing ADDR failed");
    exit(1);
  }

これで『address already in use』とはおさらば!