アプリでマルチキャスト ポートをバインドしようとしています。以前はコードは常に機能していましたが、このサーバーでは (常にではありませんが、しばしば) 失敗します...
エラー メッセージは ですAddress already in use
。複数のアプリケーションから (同じアプリケーションからでも) 同じアドレスをバインドできるため、よくわかりません...
何が原因でしょうか? 誰かがそれを要求することはわかっているので、コードは次のとおりです。
int fd = socket(PF_INET, SOCK_DGRAM, 0);
/* yes, that's a valid socket, verified.... */
u_int val = 1;
if(setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val)) < 0) {
perror("Reusing ADDR failed");
exit(1);
}
struct sockaddr_in saddr;
saddr.sin_family = PF_INET;
saddr.sin_addr.s_addr = inet_addr(multicast_group_ip);
saddr.sin_port = htons(port);
/* yes, valid multicast ip address and port, verified */
if(bind(fd, (struct sockaddr *) &saddr, sizeof(struct sockaddr_in)) == -1)
//FAILS....