Я новичок в использовании сокетов.
Я должен реализовать в среде Linux, в пространстве пользователя, протокол LACP.Каждый компьютер периодически отправляет для каждого интерфейса Ethernet управляющее сообщение, LACPDU структуры.Какое семейство сокетов будет лучшим для общения (RAW, PACKET, TCP, UDP)?Разъем отправки / получения должен быть того же типа?
Мое приложение уже хорошо отправляет LACPDU, но приложение на другой стороне не получает их (я захватывал с помощью wireshark, он захватывает пакеты, ноне доходят до приложения).
Вот как я создал сокеты:
Отправить пакет: (это работает нормально, даже без привязки)
int sock, sent;
struct sockaddr sa;
if (sock = socket(AF_INET, SOCK_PACKET, htons(ETH_P_SLOW))<0) //sockfd = socket(int socket_family, int socket_type, int protocol);
{perror("error socketsalida\n");
exit(EXIT_FAILURE);}
sa.sa_family = AF_INET;
strcpy(sa.sa_data, iface);
if((sent = sendto(sock, data, len, 0, &sa, sizeof(sa))) <= 0)
{perror("error sendto\n");
exit(EXIT_FAILURE);}
close(sock);
Получение пакета: (это не работает)
int received, sockrec;
struct sockaddr sa;
struct LACPDU buffer;
socklen_t addrlen = sizeof (sa);
sockrec = socket(AF_INET, SOCK_PACKET, htons(ETH_P_SLOW));
if (sockrec<0) {perror("Error receiver socket\n");exit(EXIT_FAILURE);}
if ((received = recvfrom(sockrec, &buffer, BUFLEN, 0, (struct sockaddr *)&sa, &addrlen)) < 0)
{perror("Errorrecvfrom\n");exit(EXIT_FAILURE);}
close (sockrec);
Любая идея?Спасибо.