资讯专栏INFORMATION COLUMN

socket和accept返回的套接字(fd)有什么区别

Simon_Zhou / 3049人阅读

摘要:定义返回出错成功套接口描述字套接字我在哪个端口功能给套接口分配一个本地协议地址。服务端的产生的套接字只是用来监听的,不能直接用于发送接收数据。

记录unix网络编程的复习之路 简单回顾下socket连接过程

socket() --得到fd!

 功能:指定了协议族(IPv4、IPv6或unix)和套接口类型(字节流、数据报或原始套接口)。但并没有指定本地协议地址或远程协议地址。
 定义:int socket(int family, int type, int protocol);
 返回:出错:-1
        成功:套接口描述字 (socket file descriptor)(套接字)sockfd

bind() --我在哪个端口?

 功能:给套接口分配一个本地协议地址。
 定义:int bind(int sockfd, const struct sockaddr *my_addr, int addrlen);

connect() --Hello!

 功能:建立与TCP服务器的连接
 定义:int connect(int sockfd, struct sockaddr *serv_addr, int addrlen);

listen() --有人给我打电话吗?

 功能:将未连接主动套接口的转换为被动套接口,指示内核接受对该套接口的连接请求。
 定义:int listen(int sockfd, int backlog);
 参数:
     - sockfd调用socket函数返回的文件描述符(套接字).
     - 未完成连接队列和已完成连接队列的上限.
        - 未完成连接队列 : 服务端还未完成三次握手全部过程的一个队列.
        - 已完成连接队列 : 服务端已经完成三次握手全部过程的一个队列, 等待accept函数从这个队列中返回下一个(返回其实是取出, 该套接字不在已完成队列中了)套接字.

accept() --"Thank you for calling port 3490."

 功能:accept函数从listen的已完成连接队列中返回下一个已完成连接, 也就是对端的套接字, 一个新的套接字. 当已完成连接队列的下一个完成 
      连接是空, 那么accept函数将被阻塞.
 定义:int accept(int sockfd, struct sockaddr *cliaddr, int* addrlen);
 返回:调用成功时返回: 1. cliaddr: 客户进程的协议地址和地址大小 2. 新套接口描述字

send() 和 recv() --Talk to me, baby!

close() --滚开!

socket()和accept()返回的fd 举个栗子:
一个客户端和一个服务端连接,双方socket产生各自的c_sock_fd和s_sock_fd;
s_sock_fd进行bind和listen后,accept准备接受客户端的连接请求;c_sock_fd调用connect请求连接服务端;
服务端接到请求产生accept_fd,届时accept_fd和c_sock_fd两个套接字可以通讯,而s_sock_fd则可以关闭;
客户端关闭close(c_sock_fd)后,服务端关闭所有未关闭的fd,通讯彻底断开。
ps:服务端的socket产生的套接字只是用来监听的,不能直接用于发送接收数据。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/63775.html

相关文章

  • socketaccept返回接字(fd)什么区别

    摘要:定义返回出错成功套接口描述字套接字我在哪个端口功能给套接口分配一个本地协议地址。服务端的产生的套接字只是用来监听的,不能直接用于发送接收数据。 记录unix网络编程的复习之路 简单回顾下socket连接过程 socket() --得到fd! 功能:指定了协议族(IPv4、IPv6或unix)和套接口类型(字节流、数据报或原始套接口)。但并没有指定本地协议地址或远程协议地址。 ...

    alexnevsky 评论0 收藏0
  • [计算机网络]简易http server程序

    摘要:最近在学习计算机网络相关的知识,来聊聊如何编写一个建议的服务器。字节流套接字数据包套接字有序分组套接字原始套接字某个协议类型常量。对于函数,第一个参数称为监听套接字描述符,返回值称为已连接套接字。 好久没输出了,知识还是要写下总结才能让思路更加清晰。最近在学习计算机网络相关的知识,来聊聊如何编写一个建议的HTTP服务器。 这个http server的实现源代码我放在了我的github上...

    YacaToy 评论0 收藏0
  • linux socket编程-socket接口

    摘要:使用来设置套接字的类型和其对已的结构。值含义另一个套接字已经绑定在相同的端口上。声明如下参数说明如下是系统调用返回的套接字文件描述符。企图连线的操作超过限定时间仍未有响应。 常用socket函数 Windows 和 Linux 上常用的 socket API 函数并不多,除了特定操作系统提供的一些基于自身系统特性的 API, 大多数 Socket API 都源于BSD Socket (...

    张金宝 评论0 收藏0
  • OpenSSL 简单思路函数笔记

    摘要:一直以来都是普通的,现在终于有基于通道的项目了。所以简单记录了一下的调用流程,便于快速入门。 一直以来都是普通的socket read/write,现在终于有基于SSL通道的项目了。所以简单记录了一下OpenSSL的调用流程,便于快速入门。本文地址:https://segmentfault.com/a/11... Reference SSL编程- 简单函数介绍 ssl的消息读写以及...

    SHERlocked93 评论0 收藏0
  • nodejs cluster模块分析

    摘要:而在进程执行把进程添加到调度器中时添加了一个回调函数,回调函数了一个带的消息,并且为,就是这个消息触发了发送的函数的执行。 最近做了点nodejs项目,对nodejs的cluster怎么利用多进程处理请求产生了疑问,于是着手进行了研究,之后发现这其中竟大有文章!一切还是先从遥远的TCP说起吧。。。 TCP与Socket 说到TCP,相信很多人都相当了解了,大学已经教过,但是又相信有很多...

    KnewOne 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<