当前位置: 技术问答>linux和unix
(菜鸟飞飞) accept后创建的socket描述符问题
来源: 互联网 发布时间:2016-09-07
本文导语: 个人理解哈: 在socket创建并bind之后,socket就已经于一个端口80进行绑定了。 那么在accept之后,又创建了一个socket连接。此时依旧与80绑定。我现在的问题是: 一个端口只能对应于一个程序。那么accept之后创建的socket...
个人理解哈:
在socket创建并bind之后,socket就已经于一个端口80进行绑定了。
那么在accept之后,又创建了一个socket连接。此时依旧与80绑定。我现在的问题是:
一个端口只能对应于一个程序。那么accept之后创建的socket连接和我们此时运行的socket程序是什么关系呢?线程和进程的关系么?
不对之处。请重拍!!
在socket创建并bind之后,socket就已经于一个端口80进行绑定了。
那么在accept之后,又创建了一个socket连接。此时依旧与80绑定。我现在的问题是:
一个端口只能对应于一个程序。那么accept之后创建的socket连接和我们此时运行的socket程序是什么关系呢?线程和进程的关系么?
不对之处。请重拍!!
|
bind的两种英文解释:
一个TCP连接,使用一对(endpoint)端点 (local_addr:local_port, remote_addr:remote_port)来标识的。
bind并listen只是一个半开连接,通常为:*:local_port
bind实际上是给socket指定一个本地地址,或者成为名字,之后listen之后才建立一个半开连接。楼主可以用
netstat查看一下,bind之后是什么也看不到的。只有listen后才能看到类似:
tcp4 0 0 *.80 *.* LISTEN
状态的输出。
bind之后,可以listen,也可以connnect
SYSV:
The bind subroutine assigns a Name parameter to an unnamed socket.
Sockets created by the socket subroutine are unnamed; they are
identified only by their address family. Subroutines that connect
sockets either assign names or use unnamed sockets.
BSD:
The bind() system call assigns the local protocol address to a socket.
When a socket is created with socket(2) it exists in an address family
space but has no protocol address assigned. The bind() system call
requests that addr be assigned to the socket.
一个TCP连接,使用一对(endpoint)端点 (local_addr:local_port, remote_addr:remote_port)来标识的。
bind并listen只是一个半开连接,通常为:*:local_port
bind实际上是给socket指定一个本地地址,或者成为名字,之后listen之后才建立一个半开连接。楼主可以用
netstat查看一下,bind之后是什么也看不到的。只有listen后才能看到类似:
tcp4 0 0 *.80 *.* LISTEN
状态的输出。
bind之后,可以listen,也可以connnect
|
好像是接受连接之后系统会给分配个端口还是套接字什么的,之后进行数据交换用的就是系统分配的这东西。至于你所说的线程,进程什么的,那得看你是创建的线程还是进程去处理数据。
|
一个是监听套接口,一个是连接套接口
监听套接口的端口一般是众所周知的保留端口,连接套接口一般是临时端口
监听套接口的端口一般是众所周知的保留端口,连接套接口一般是临时端口