这是一个基本问题。我总结了socket API语义,如下所示。
bind() - where I am connect() - where I want to send message
如果我想限制Tom和Jerry必须通过以下修复连接进行讨论:
Tom's IP:Tom's Port <--> Jerry's IP:Jerry's Port
我必须在两侧调用bind()来设置它们各自的套接字。正确?
在下面的代码中,我没有明确地将bind()绑定到 new_socket ,
new_socket = accept(listen_socket, (struct sockaddr*)&remote_addr, &addr_size);
send_data(new_socket);
recv_data(new_socket);
但是当我通过new_socket发送和recv数据时,它仍然使用IP地址和端口号I bind()到listen套接字。该信息是否被系统隐式复制到new_socket?
如果new_socket和listen_socket都绑定到同一个IP地址和端口,那么系统如何区分它们呢?
谢谢!
答案 0 :(得分:1)
如果new_socket和listen_socket都绑定到同一个IP地址和端口,那么系统如何区分它们呢?
TCP协议使用{host-ip,host-port,peer-ip,peer-port}元组来标识连接。也就是说,您可以使用相同的{host-ip,host-port} -part(与您的侦听套接字相同)进行许多传入连接,但使用不同的{peer-ip,peer-port} -part。当您连接所有传出连接时,同一个IP上有不同的端口。