同一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』とはおさらば!