узнать, что сокет готов к отправке данных
От: fair  
Дата: 13.03.06 19:24
Оценка:
Использую в своей программе 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);
Re: узнать, что сокет готов к отправке данных
От: MaximE Великобритания  
Дата: 13.03.06 20:25
Оценка:
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 Yegorushkin
Posted via RSDN NNTP Server 2.1 beta
Re: узнать, что сокет готов к отправке данных
От: butcher Россия http://bu7cher.blogspot.com
Дата: 14.03.06 05:55
Оценка:
Здравствуйте, fair, Вы писали:

F>Как узнать, что сокет готов к отправке данных (т.е. что протоколам нижнего уровня уже известен MAC-адрес необходимого компьютера) и прекратить отправку данных?


Вы можете сами запросить MAC-адрес, см. SendARP

Нет ничего невозможного..
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.