accept函数由TCP服务器调用,用于从已完成连接队列返回下一个已完成连接。如果已完成连接队列为空,那么进程被投入睡眠(假定套接字默为默认的阻塞方式)

函数原型:

ACCEPT(2)                  Linux Programmer's Manual                 ACCEPT(2)NAMEaccept, accept4 - accept a connection on a socketSYNOPSIS#include <sys/types.h>          /* See NOTES */#include <sys/socket.h>int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

参数说明:

sockfd是由socket函数返回的套接字描述符,参数addr和addrlen用来返回已连接的对端进程(客户端)的协议地址。如果我们对客户端的协议地址不感兴趣,可以把arrd和addrlen均置为空指针

返回值:

返回:若成功则为非负描述符,若出错则为-1

如果accept成功,那么其返回值是由内核自动生成的一个全新描述符,代表与客户端的TCP连接。一个服务器通常仅仅创建一个监听套接字,它在该服务器生命周期内一直存在。内核为每个由服务器进程接受的客户端连接创建一个已连接套接字。当服务器完成对某个给定的客户端的服务器时,相应的已连接套接字就被关闭。

IPv4的TCP伪代码如下:

int sockfd = socket(AF_INET, SOCK_STREAM, 0); //TCP
// 调用bind()
// 调用listen()//等待连接
struct sockaddr_in cliaddr;
socklen_t len = sizeof(cliaddr);
int connfd = accept(sockfd, (sockaddr *)&cliaddr, &len);
if (-1 == connfd) {  perror("accept fail");
}//解析客户端地址
char buff[INET_ADDRSTRLEN + 1] = {0};
inet_ntop(AF_INET, &cliaddr.sin_addr, buff, INET_ADDRSTRLEN);
uint16_t port = ntohs(cliaddr.sin_port);
printf("connection from %s, port %d\n", buff, port);

参考:《unix网络编程》·卷1

TCP/IP编程之accept函数详解相关推荐

  1. TCP/IP编程之select函数详解

    前述: linux下的I/O复用模型目前很多都已经不用select函数了,而是用epoll,但是为什么还需要了解select编程呢,其实是从两个方面考虑的:一是为了通过select去理解epoll,而 ...

  2. tcp/ip网络编程--accept()函数返回的套接字

    tcp/ip网络编程–accept()函数返回的套接字 套接字:1)套接字是对网络中不同主机的应用进程之间进行双向通信的端点的抽象:一个套接字就是网络进程通信的一端.[1] 2)套接字是用来与另一个进 ...

  3. 网络套接字编程之IO模型详解

    网络套接字编程之IO模型详解 本文主要参考自<UNIX网络编程>(第1卷)(套接口API第3版) Unix下可用的五种I/O模型有: 阻塞式I/O 非阻塞式I/O I/O复用(select ...

  4. socket编程之 accept函数的理解

    在进入我们的正题之前,再来复习一波编写服务器的函数流程吧 服务器端:socket()-->bind( )-->listen()-->accept()-->read()/writ ...

  5. TCP/IP 协议栈及 OSI 参考模型详解

    TCP/IP 协议栈及 OSI 参考模型详解 转载地址:http://www.codeceo.com/article/tcp-ip-osi-model.html OSI参考模型 OSI RM:开放系统 ...

  6. C语言网络编程:accept函数详解

    文章目录 前言 函数描述 代码实例 如何得到客户端的IP 和 端口号 前言 当使用tcp服务器使用socket创建通信文件描述符,bind绑定了文件描述符,服务器ip和端口号,listen将服务器端的 ...

  7. accept函数详解

    既然服务端已经很虔诚了,很真诚了,处于倾听状态,那么该是去尝试接受客户端请求的时候了,别只顾着倾听,不去接纳别人. 接纳客户端请求的函数是accept, 我们先来看看函数的原型: WINSOCK_AP ...

  8. TCP/IP 协议栈及 OSI 参考模型详解--云平台技术栈04

    导读:之前发布了云平台技术栈(ps:点击可查看),本文主要说一下其中的tcp/ip和网络! 来源:王东裕 http://wangdy.blog.51cto.com/3845563/1588379 OS ...

  9. 后端开发【一大波有用知识】tcp/ip定时器与滑动窗口详解

    为什么udp有包长,而tcp没有包长. 首先,send()发送一次发送1k,发送一次缓冲区满了就会返回-1.2k发送出去后缓冲区被清空,send()才会被再次调用.最大传输片会打印四个包发送.而最大传 ...

最新文章

  1. redux-thunk使用教程
  2. PHP高并发的解决方案
  3. 2020年6月18日 618感言
  4. android 颜色资源文件,android中colors.xml颜色设置资源文件的方法
  5. jquery问题,如何调用带this的函数?
  6. python能写桌面程序吗_python能写桌面程序吗
  7. 图论为什么这么难_图论是什么,为什么要关心?
  8. 如何使用MySQL和JPA使用Spring Boot构建Rest API
  9. java索引丢失怎么解决_java.sql.SQLException: 索引中丢失 IN 或 OUT 参数:: 1解决办法...
  10. 英语计算机班,15计算机班英语第二次月考测试卷(2017).docx
  11. window.location.href = basePath + paper/deleteExpertComment.action?expertId=+$(this).prev().val();
  12. 【MM 容差】采购订单中的容差
  13. 百度搜索结果左侧图片设置方法
  14. POI和Java Excel Api导入导出----详细到你不敢相信
  15. 工具使用分享之爱思助手安装苹果APP
  16. 浅谈中国程序员的四个层次,你在第几层?
  17. 《warframe》经济系统分析——DE控制白金产出窍门
  18. 年前找工作好,还是年后找工作好?求职需警惕,小心陷入羊群效应
  19. Stratolaunch推出高超音速测试飞行器TA-0 今年将搭载史上最大飞机Roc升空
  20. robocopy 遷移共享文件夾

热门文章

  1. 红米Note9和红米Note9Pro 哪个好
  2. 7-4 例4-3游泳池改造预算分数 10
  3. A recurrent neural network based microscopic car following model to predict traffic oscillation
  4. Linux操作系统下测试磁盘读写速度
  5. 干货 | 如何做一个简单的访谈研究?
  6. 小程序: wx.uploadFile上传文件保持原文件名的方法
  7. 计算机网络- IP电话和Qos
  8. Jacobian and Hessian(雅克比矩阵和海塞矩阵)
  9. 杭电OJ 1061(C++)
  10. 字体大宝库:16款漂亮的免费英文手写字体推荐