Linux socket连接过程所涉及的部分函数(bind(),listen(),accept(),connect())功能浅析

服务器端:
    bind():为套接字分配地址
    listen():标记套接字可以通过accept接受连接了,可以说进入了监听连接了,但是具体连接还是需要accept,且指明了最大可连接客户端数量
    accept():system  call(系统调用)
        从待处理的连接队列中提出第一个连接给当前正在监听的套接字(s_fd),且创建一个“连接的套接字”,并返回套接字描述符,这个新创建的套接字没有在监听状态,且原先的套接字(s_df)不受影响。
        参数中:“原先的套接字”需要经过bind()、listen(),处理过的
        那么就是说:这个新创建的套接字被用来和客户端的套接字进行通信。服务器原先的套接字负责“指挥”这个连接过程,并不参与通信过程。

客户端:
    connect(): system call
        把套接字和地址连接起来(类似bind()),如果当前socket是SOCK_STREAM类型的,这个调用尝试去连接绑定了addr(第二个参数)中的地址的那个套接字(也就是服务器端的套接字),未连接上的套接字可能被“溶解”,也就是不会在此阻塞,会跳过并报错。


以上内容基本都是从Linux自带的manual中翻译过来的,manual是真的好用,英文不好的(比如我)可以边查单词边读,真的很不错,权威的说明书。

发布了16 篇原创文章 · 获赞 3 · 访问量 3086

猜你喜欢

转载自blog.csdn.net/qq_42704360/article/details/102835908
今日推荐