socket: listen()函数 accept()函数

listen() 函数

可以让套接字进入被动监听状态

int listen(int sock, int backlog);  //Linux
int listen(SOCKET sock, int backlog);  //Windows
  • backlog 为请求队列的最大长度,请求队列即缓冲区
  • 缓冲区的长度(能存放多少个客户端请求)可以通过 listen() 函数的 backlog 参数指定
  • backlog 的值设置为 SOMAXCONN,就由系统来决定请求队列长度,这个值一般比较大,可能是几百,或者更多。
  • 当请求队列满时,就不再接收新的请求,对于 Linux,客户端会收到 ECONNREFUSED 错误,对于 Windows,客户端会收到 WSAECONNREFUSED 错误。

accept()函数

当套接字处于监听状态时,可以通过 accept() 函数来接收客户端请求 参数与 listen() 和 connect() 是相同的

int accept(int sock, struct sockaddr *addr, socklen_t *addrlen);  //Linux
SOCKET accept(SOCKET sock, struct sockaddr *addr, int *addrlen);  //Windows
  • accept() 返回一个新的套接字来和客户端通信,addr 保存了客户端的IP地址和端口号,而 sock 是服务器端的套接字,大家注意区分。
  • 后面和客户端通信时,要使用这个新生成的套接字,而不是原来服务器端的套接字。
  • accept() 会阻塞程序执行(后面代码不能被执行),直到有新的请求到来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值