Могу ли я определить, используется ли UDP-сокет или подключенный UDP-сокет?

Могу ли я определить, использует ли клиентское приложение UDP-сокет или подключенный UDP-сокет?

Если да, то как? Если нет, почему?

1 ответ

Решение

Как я уже сказал в моем комментарии выше, вызов кода connect на сокете UDP. Это обеспечивает только трафик к / от адреса соединения, разрешенного (и все другие пакеты отбрасываются) и позволяет использовать отправку вместо sendto, но трафик все еще UDP.

Но вы можете использовать netstat команда из командной строки, чтобы увидеть, имеет ли сокет датаграммы связь с удаленным адресом:

Например, представьте, если код сделал это:

// create a datagram socket that listens on port 12345
sock = socket(AF_INET, SOCK_DGRAM, 0);
port = 12345;
addrLocal.sin_family = AF_INET;
addrLocal.sin_port = htons(port);
result = bind(sock, (sockaddr*)&addrLocal, sizeof(addrLocal));

// associate the socket only with packets arriving from 1.2.3.4:6666
addrRemote.sin_family = AF_INET;
addrRemote.sin_port = htons(6666);
addrRemote.sin_addr.s_addr = ipaddress;  // e.g. "1.2.3.4"
result = connect(sock, (sockaddr*)&addrRemote, sizeof(addrRemote));

Соответствующий netstat -a -u раскроет следующее:

ubuntu@ip-10-0-0-15:~$ netstat -u -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
udp        0      0 ip-10-0-0-15:12345      1.2.3.4:6666            ESTABLISHED

Наличие значения, которое не *:* в Foreign Address столбец для сокета UDP покажет, имеет ли сокет адрес подключения, связанный с ним.

Другие вопросы по тегам