listen() - Unix、Linux 系统调用
Tutorials Point


  Unix 初学者指南
  Unix Shell 编程
  高级 Unix
  Unix 有用参考
  Unix 有用资源
  精选阅读

版权所有 © 2014 tutorialspoint



  首页     参考     讨论论坛     关于 TP  

listen() - Unix、Linux 系统调用


previous next AddThis Social Bookmark Button

广告

名称

listen - 监听套接字上的连接

语法

#include <sys/socket.h>

int listen(int sockfd, int backlog);

描述

要接受连接,首先使用 socket(2) 创建一个套接字,使用 listen() 指定接受传入连接的意愿和传入连接的队列限制,然后使用 accept(2) 接受连接。listen() 调用仅适用于类型为 SOCK_STREAMSOCK_SEQPACKET 的套接字。

backlog 参数定义了挂起连接队列可能增长到的最大长度。如果连接请求到达时队列已满,则客户端可能会收到错误,并指示 ECONNREFUSED 或,如果底层协议支持重传,则请求可能会被忽略,以便重试成功。

注释

TCP 套接字上 backlog 参数的行为在 Linux 2.2 中发生了变化。现在它指定了等待接受的完全建立的套接字的队列长度,而不是不完整连接请求的数量。可以使用 tcp_max_syn_backlog sysctl 设置不完整套接字队列的最大长度。启用 syncookies 时,没有逻辑上的最大长度,并且会忽略此 sysctl 设置。有关更多信息,请参阅 tcp(7)。

返回值

成功时,返回零。发生错误时,返回 -1,并且 errno 被适当地设置。

错误

标签描述
EADDRINUSE
 另一个套接字已经在同一端口上侦听。
EBADF 参数 sockfd 不是有效的描述符。
ENOTSOCK
 参数 sockfd 不是套接字。
EOPNOTSUPP
 套接字的类型不支持 listen() 操作。

符合标准

4.4BSD、POSIX.1-2001。listen() 函数调用首次出现在 4.2BSD 中。

错误

如果套接字的类型为 AF_INET,并且 backlog 参数大于常量 SOMAXCONN(在 Linux 2.0 和 2.2 中为 128),则会将其静默截断为 SOMAXCONN

参见



previous next Printer Friendly

广告


  

广告



广告