listen
函数原型:
int listen( SOCKET s, // 已经 bind 绑定好端口的socket(监听socket) int backlog // 等待连接队列的最大长度 );返回值:
成功:返回 0
失败:返回SOCKET_ERROR
作用:把一个已经绑定IP端口的socket标记成监听socket,告诉操作系统这个socket不用主动发起连接,只需要等待别人连进来
参数backlog: 是内核等待accept的排队数量,如果队列满了新的客户端连接请求会被拒绝
accept
函数原型:
SOCKET accept( SOCKET s, // 输入:已经 listen 的监听socket struct sockaddr* addr, // 输出:存放对端(客户端)IP、端口信息,填NULL代表不获取 int* addrlen // 输入输出:addr结构体的字节大小 );返回值:
成功:返回一个新的socket,用来和客户端收发数据
失败:返回INVALID_SOCKET,错误码用WSAGetLastError()获取 (必须在API失败后立刻调用,否则会被其他调用覆盖)
作用:从系统内核的已完成连接队列里,取出一个客户端连接
参数int* addrlen:调用accept之前,需要告诉系统对端addr需要缓冲区多大,accept返回后,系统会把实际写入的字节数写回这个变量