Недопустимый аргумент для recvfrom(...)
Я пытаюсь создать простое UDP-приложение для захвата данных, отправляемых другим приложением. Когда код попадает в вызов метода recvfrom (), он возвращает -1, а WSAGetLastError возвращает 10022. Я не могу определить, что не так с аргументами. Вот объявления, настройка и вызов.
Пожалуйста, обратите внимание, что я не могу скопировать пасту из моего рабочего механизма сюда, и я прошу вас быть немного терпимыми к опечаткам.
Декларация
const unsigned in BUFLEN = 1024; const char IP_ADDRESS[ ] = "192.10.11.33"; const unsigned int ETHERNET_PORT = 2055; int receive_status = 0; SOCKET m_receive_socket; char buff[ FUBLEN ]; STRUCT sockaddr_in m_socket_address_in int sock_address_size;
Инициализация
sock_address_size = sizeof( m_socket_address_in ); m_receive_socket = socket( AF_INET, SOCK_DGRAM, IPPROTO_UDP); // error check from previous line not shown, did not return SOCKET_ERROR memset( (char *) &m_socket_address_in, 0, sizeof( m_socket_address_in) ); m_socket_address_in.sin_family = AF_INET; m_socket_address_in.sin_port = htons( ETHERNET_PORT ); m_socket_address_in.sin_addr.S_un.S_addr = INET_ADDR( IP_ADDRESS );
Код
receive_status = recvfrom( m_receive_socket, // value = 264 buff, BUFLEN, // value = 1024 0, (struct sockaddr * ) &m_socket_address_in, &sock_address_size ); // value = 16
Я посмотрел на аргументы и не могу признать их недействительными. Понятно ли это кому-то с большим опытом?
Что я уже пробовал:
Я посмотрел на значения аргументов. Адреса выглядят действительными.
Richard MacCutchan
Я думаю,что вы неправильно настроили розетки. m_receive_socket
должен содержать IP-адрес, порт и т. д. То m_socket_address_in
пакет заполняется при получении сообщения.