套接字API函数的语义

时间:2011-02-15 15:48:16

标签: sockets network-programming

这是一个基本问题。我总结了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地址和端口,那么系统如何区分它们呢?

谢谢!

1 个答案:

答案 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上有不同的端口。