Использую в своей программе UDP сокет для отправки данных на сервер.
Появился вопрос:
Как узнать, что сокет готов к отправке данных (т.е. что протоколам нижнего уровня уже известен MAC-адрес необходимого компьютера) и прекратить отправку данных?
Например, в следющем коде:
SOCKET sock;
SOCKADDR_IN addrOfServer, addrOfCli;
sock = socket(AF_INET, SOCK_DGRAM, 0);
addrOfCli.sin_family = AF_INET;
addrOfCli.sin_addr.s_addr = htonl(INADDR_ANY);
addrOfCli.sin_port = htons(0);
if( bind(sock, (SOCKADDR*)&addrCli, sizeof(SOCKADDR_IN)) == SOCKET_ERROR )
{
return false;
}
char data;
addrOfServer.sin_family = AF_INET;
addrOfServer.sin_port = htons(UDP_PORT);
addrOfServer.sin_addr.s_addr = inet_addr("xxx.xxx.xxx.xxx");
// Как здесь убедиться, что сокет готов к отправке данных и если готов(т.е. уже будет известен удаленный MAC-адрес), то не отправлять данные?
// может использовать не sendto(), а что-то другое?
sendto(sock, &data, 1, 0, (SOCKADDR*)&addrOfServer, sizeof(SOCKADDR_IN));
closesocket(sock);
On Mon, 13 Mar 2006 19:24:51 -0000, fair <52311@users.rsdn.ru> wrote:
> Использую в своей программе UDP сокет для отправки данных на сервер.
> Появился вопрос:
> Как узнать, что сокет готов к отправке данных (т.е. что протоколам нижнего уровня уже известен MAC-адрес необходимого компьютера) и прекратить отправку данных?
Попробовать tcp connect на адрес хоста. Когда connect отработает с ECONNREFUSED или успешно, это значит на отосланный SYN был получен ответ SYN-ACK или RST от хоста и его МАС адрес должен уже быть в arp кэше.
--
Maxim YegorushkinPosted via RSDN NNTP Server 2.1 beta
Здравствуйте, fair, Вы писали:
F>Как узнать, что сокет готов к отправке данных (т.е. что протоколам нижнего уровня уже известен MAC-адрес необходимого компьютера) и прекратить отправку данных?
Вы можете сами запросить MAC-адрес, см.
SendARP