Я нашел следующий код:
int fd1 = socket(...);
bind(fd1, "0.0.0.0:0");
connect(fd1, addr1); // ------------ EINPROGRESS
addr = getsockname(fd1);
int fd2 = socket(...);
bind(fd2, addr);
connect(fd1, addr2); // ------------- EINPROGRESS
send(fd1, message); // --------------> OK
Все вызовы успешны, и я не могу понять, почему все еще используемый локальный адрес может быть привязан к fd2;
Разрешено ли это? Строка выглядит следующим образом:
socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_TCP) = 27
setsockopt(27, SOL_SOCKET, SO_REUSEPORT, [1], 4) = 0
setsockopt(27, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
bind(27, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
connect(27, {sa_family=AF_INET, sin_port=htons(21116), sin_addr=inet_addr("192.168.3.47")}, 16) = -1 EINPROGRESS --------------------------- 1
getsockopt(27, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
setsockopt(27, SOL_TCP, TCP_NODELAY, [1], 4) = 0
getsockname(27, {sa_family=AF_INET, sin_port=htons(41473), sin_addr=inet_addr("192.168.3.47")}, [128->16]) = 0 ---------------------------- 2
socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_TCP) = 28
setsockopt(28, SOL_SOCKET, SO_REUSEPORT, [1], 4) = 0
setsockopt(28, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
bind(28, {sa_family=AF_INET, sin_port=htons(41473), sin_addr=inet_addr("192.168.3.47")}, 16) = 0 ----------------------------------------- 3
connect(28, {sa_family=AF_INET, sin_port=htons(21117), sin_addr=inet_addr("192.168.3.47")}, 16) = -1 EINPROGRESS -------------------------- 4
getsockopt(28, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
setsockopt(28, SOL_TCP, TCP_NODELAY, [1], 4) = 0
getsockname(28, {sa_family=AF_INET, sin_port=htons(41473), sin_addr=inet_addr("192.168.3.47")}, [128->16]) = 0
epoll_ctl(12, EPOLL_CTL_DEL, 28, NULL) = 0
fcntl(28, F_GETFD) = 0x1 (flags FD_CLOEXEC)
close(28) = 0
sendto(27, "\304R/\n\v\236\332\346wXif\311_\375\1\22\t426463026\32\f192"..., 50, MSG_NOSIGNAL, NULL, 0) = 50 ------------------------------- 5
Подробнее здесь: https://stackoverflow.com/questions/792 ... al-address
Может ли TCP-сокет быть привязан к текущему используемому локальному адресу? ⇐ Linux
1733730764
Anonymous
Я нашел следующий код:
int fd1 = socket(...);
bind(fd1, "0.0.0.0:0");
connect(fd1, addr1); // ------------ EINPROGRESS
addr = getsockname(fd1);
int fd2 = socket(...);
bind(fd2, addr);
connect(fd1, addr2); // ------------- EINPROGRESS
send(fd1, message); // --------------> OK
Все вызовы успешны, и я не могу понять, почему все еще используемый локальный адрес может быть привязан к fd2;
Разрешено ли это? Строка выглядит следующим образом:
socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_TCP) = 27
setsockopt(27, SOL_SOCKET, SO_REUSEPORT, [1], 4) = 0
setsockopt(27, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
bind(27, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
connect(27, {sa_family=AF_INET, sin_port=htons(21116), sin_addr=inet_addr("192.168.3.47")}, 16) = -1 EINPROGRESS --------------------------- 1
getsockopt(27, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
setsockopt(27, SOL_TCP, TCP_NODELAY, [1], 4) = 0
getsockname(27, {sa_family=AF_INET, sin_port=htons(41473), sin_addr=inet_addr("192.168.3.47")}, [128->16]) = 0 ---------------------------- 2
socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_TCP) = 28
setsockopt(28, SOL_SOCKET, SO_REUSEPORT, [1], 4) = 0
setsockopt(28, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
bind(28, {sa_family=AF_INET, sin_port=htons(41473), sin_addr=inet_addr("192.168.3.47")}, 16) = 0 ----------------------------------------- 3
connect(28, {sa_family=AF_INET, sin_port=htons(21117), sin_addr=inet_addr("192.168.3.47")}, 16) = -1 EINPROGRESS -------------------------- 4
getsockopt(28, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
setsockopt(28, SOL_TCP, TCP_NODELAY, [1], 4) = 0
getsockname(28, {sa_family=AF_INET, sin_port=htons(41473), sin_addr=inet_addr("192.168.3.47")}, [128->16]) = 0
epoll_ctl(12, EPOLL_CTL_DEL, 28, NULL) = 0
fcntl(28, F_GETFD) = 0x1 (flags FD_CLOEXEC)
close(28) = 0
sendto(27, "\304R/\n\v\236\332\346wXif\311_\375\1\22\t426463026\32\f192"..., 50, MSG_NOSIGNAL, NULL, 0) = 50 ------------------------------- 5
Подробнее здесь: [url]https://stackoverflow.com/questions/79264187/can-tcp-socket-be-bound-to-a-current-used-local-address[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия