listen和accept函数

listen函数是用来设置监听连接的句柄和队列

当listen函数执行完成以后,服务端就已经可以接受客户端来的新连接了,新连接完成以后listen会把客户端的ip,port和连接句柄放在监听队列里面,等待accept函数来取,如果监听队列满了,listen会拒绝新来的连接。

accept仅仅是从监听队列里面取出连接而已,甚至不会关注连接的状态(比如连接断开在取出来的时候已经断开了都不知道)

也就是说,在服务端这边,listen才是整个连接的关键函数,accept不是

时间: 2024-10-21 21:07:12

listen和accept函数的相关文章

Socket进程处理被中断的系统调用及Accept函数返回EINTR错误处理

我们用慢系统调用来描写叙述那些可能永远阻塞的系统调用(函数调用),如:accept.read等.永远阻塞的系统调用是指调用有可能永远无法返回.多数网络支持函数都属于这一类.比如,假设没有客户连接到server上,则server对accept的调用就没有返回保证.类似的.假设客户从未发送过一行要求server回射的文本.则server对read的调用将永不返回.其它慢系统调用的样例是对管道和终端设备的读写. 有一个例外,就是磁盘IO.他一般都返回调用者. 当一个进程阻塞与慢系统调用时捕获到一个信号

UDT协议实现分析——bind、listen与accept

UDT Server启动之后,基于UDT协议的UDP数据可靠传输才成为可能,因而接下来分析与UDT Server有关的几个主要API的实现,来了解下UDT Server是如何listening在特定UDP端口上的.主要有UDT::bind(),UDT::listen()和UDT::accept()等几个函数. bind过程 通常UDT Server在创建UDT Socket之后,首先就要调用UDT::bind(),与一个特定的本地UDP端口地址进行绑定,以便可以在希望的端口上监听.这里来看一下U

accept函数

accept()函数 系统调用 accept() 会有点古怪的地方的! 你能够想象发生 这种事情:有人从非常远的地方通过一个你在侦听 (listen()) 的port连接 (connect()) 到你的机器.它的连接将增加到等待接受 (accept()) 的队列 中. 你调用 accept() 告诉它你有空暇的连接.它将返回一个新的套接字文 件描写叙述符!这样你就有两个套接字了,原来的一个还在侦听你的那个port, 新的在准备发送 (send()) 和接收 ( recv()) 数据.这就是这个过

socket执行accept函数时没有进入阻塞状态,而是陷入了无限循环

接着前两天继续看<VC深入详解>的网络编程部分,这次我快速看了遍书上的函数以及套接字C-S模型,然后自己从0开始写了个简单的服务端,结果发现一直在输出 而明明我还没有写客户端程序,由于打印的代码只有一处,在如下的while循环里 while (true) { /* 5. 接收客户端发送的连接请求 */ SOCKET sockConnect = accept(sockServer, (SOCKADDR*)&addrClient, &len); /* 6. [发送/接收]数据 */

TCP网络编程中connect()、listen()和accept()三者之间的关系

基于 TCP 的网络编程开发分为服务器端和客户端两部分,常见的核心步骤和流程如下: connect()函数 对于客户端的 connect() 函数,该函数的功能为客户端主动连接服务器,建立连接是通过三次握手,而这个连接的过程是由内核完成,不是这个函数完成的,这个函数的作用仅仅是通知 Linux 内核,让 Linux 内核自动完成 TCP 三次握手连接(三次握手详情,请看<浅谈 TCP 三次握手>),最后把连接的结果返回给这个函数的返回值(成功连接为0, 失败为-1). 通常的情况,客户端的 c

深入理解TCP协议及其源代码——connect及bind、listen、accept背后的“三次握手”

一.TCP简介 TCP(Transmission Control Protocol,传输控制协议)是一个传输层(Transport Layer)协议,它在TCP/IP协议族中的位置如图1所示.它是专门为了在不可靠的互联网络上提供一个面向连接的且可靠的端到端(进程到进程)字节流而设计的.互联网络与单个网络不同,因为互联网络的不同部分可能有截然不同的拓扑.带宽.延迟.分组大小和其他参数.TCP的设计目标是能够动态地适应互联网络的这些特性,而且当面对多种失败的时候仍然足够健壮. 图1 TCP在TCP/

传说用户发来的请求是在JIoEndpoint的accept函数中接收的,是tomact与外界交互的分界点

传说用户发来的请求是在JIoEndpoint的accept函数中接收的, 这是tomact与外界交互的分界点,所以来研究一下, >>>>>>>>>>>>>>>JIoEndpoint>>>>>>>>>>>>>>>>>>> 从最顶层的interface开启: ==================JIoEndp

accept()函数用来告诉Qt,事件处理函数“接收”了这个事件,不要再传递;ignore()函数则告诉Qt,事件处理函数“忽略”了这个事件,需要继续传递(看一下QWidget::mousePressEvent的实现,最为典型。如果希望忽略事件,只要调用父类的响应函数即可)

QEvent的accept()和ignore()一般不会用到,因为不如直接调用QWidget类的事件处理函数直接,而且作用是一样的,见下面的例子. 推荐直接调用QWidget的事件处理函数.而不是调用accept()和ignore(). 只有一种情况下,必须使用调用accept()和ignore(),那就是closeEvent(),在closeEvent()的事件处理函数中,必须调用accept()和ignore().即如果想窗口被关闭,那么必须显示调用event->accept():如果不想关

简单的listen+fork accept服务器实现

前段时间在分析nginx的IO模型的时候,知道nginx采用的是一进程监听+多进程accept的模式,也就是主进程先创建socket并bind指定端口listen之后,再fork出若干个子进程,由子进程去accept连接请求. 这段时间将其用代码实现并验证了一遍,监听端口后对接受到的请求,按照http协议返回进程id,算是一个极其简单的web服务器吧,后续对http协议的内容了解深入之后,看看再怎么对其扩展下. #include <stdio.h> #include <stdlib.h&