Я нашел следующий код:
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
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Невозможно запустить Кестрел. Не удалось привязать адрес к уже используемому адресу.
Anonymous » » в форуме C# - 0 Ответы
- 34 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как отправлять запросы работникам ZeroMQ, когда маршрутизатор привязан к адресу inproc?
Anonymous » » в форуме C++ - 0 Ответы
- 36 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как отправлять запросы работникам ZeroMQ, когда маршрутизатор привязан к адресу inproc?
Anonymous » » в форуме C++ - 0 Ответы
- 22 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Невозможно подключиться к локальному серверу MySQL через сокет /tmp/mysql.sock.
Anonymous » » в форуме Python - 0 Ответы
- 33 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Невозможно подключиться к локальному серверу MySQL через сокет /var/lib/mysql/
Anonymous » » в форуме MySql - 0 Ответы
- 30 Просмотры
-
Последнее сообщение Anonymous
-