0

次の動作を実装する必要があります。サーバーの起動時に、ブロードキャストを使用して既存のサーバーをチェックする必要があります。その後、回答を待ちます。

しかし、待機のタイムアウトを設定する方法は?

int optval = 1;
char buff[BUFF_SIZE];
SOCKADDR_IN addr;
int length = sizeof(addr);

if (setsockopt(s, SOL_SOCKET, SO_BROADCAST, (char*)&optval, sizeof(optval)) == SOCKET_ERROR) throw(errors::SETSOCKOPT);

addr->sin_family = AF_INET;
addr->sin_port = htons(this->serverPort);
addr->sin_addr.s_addr = INADDR_ANY;
sendto(s, this->serverName.c_str(), this->serverName.length() + 1, NULL, (SOCKADDR*)&addr, sizeof(addr));

memset(&addr, NULL, sizeof(addr));

recvfrom(s, buff, BUFF_SIZE, NULL, (SOCKADDR*)&addr, &length);
4

2 に答える 2

1

setsockopt()およびで読み取りタイムアウトを設定し、タイムアウトがトリガーされた場合に発生するSO_RCVTIMEOハンドルを設定します。EAGAIN/EWOULDBLOCK

于 2016-10-04T00:00:39.710 に答える