LINUX.ORG.RU

udp+bind()+тупняк = Invalid argument

 ,


0

1

Что-то не могу понять. Раньше с UDP работал мало. Сейчас задаю удаленный адрес и порт через connect(), а локальный порт выбирает ОС. Так все работает. Но нужно задать фиксированный локальный порт. bind() возвращает ошибку - Invalid argument.

Код выглядит примерно так:

memset(&addr_local,0,sizeof(addr_local));
addr_local.sin_family = AF_INET;
addr_local.sin_port = htons(local_port);
addr_local.sin_addr.s_addr = htonl(INADDR_ANY);
bind(fd,(struct sockaddr*)&addr_local,sizeof(addr_local)) );

Что же не так?

мне не нравится последний агрумент bind'a...
и в мане написано:


EINVAL - The socket is already bound to an address.
EINVAL - addrlen is wrong, or addr is not a valid address for this socket's domain.



p.s. а какого типа addr_local?

metawishmaster ★★★★★
()
Последнее исправление: metawishmaster (всего исправлений: 1)
Ответ на: комментарий от metawishmaster

man udp предлагает

udp_socket = socket(AF_INET, SOCK_DGRAM, 0);

Так что оставлю ноль.

А изменение порядка помогло. Значит надо сначала задавать локальный адрес, а потом удаленный.

pathfinder ★★★★
() автор топика