第五章 套接口库函数参考
5.1 Windows Socket 1.1 库函数参考
本章以字母顺序列出了套接口库函数,并介绍了技术细节。
使用任一库函数时应在程序中包含 WINSOCK.H 头文件。在附录 A.2 中还列出了一些与
BERKELEY 兼容的头文件。这些头文件只起到兼容性的作用,它们都包含了 WINSOCK.H
头文件,WINDOWS.H 头文件也是必需的,但 WINSOCK.H 会视需要包含这一头文件。
5.1.1 accept()
简述:
在一个套接口接受一个连接。
#include <winsock.h>
SOCKET PASCAL FAR accept( SOCKET s, struct sockaddr FAR* addr,
int FAR* addrlen);
s:套接口描述字,该套接口在 listen()后监听连接。
addr:(可选)指针,指向一缓冲区,其中接收为通讯层所知的连接实体的地址。Addr
参数的实际格式由套接口创建时所产生的地址族确定。
addrlen:(可选)指针,指向存有 addr 地址长度的整形数。
注释:
本函数从 s 的等待连接队列中抽取第一个连接,创建一个与 s 同类的新的套接口并返回句
柄。如果队列中无等待连接,且套接口为非阻塞方式,则 accept()阻塞调用进程直至新的连
接出现。如果套接口为非阻塞方式且队列中等待连接,则 accept()返回一错误代码。已接受
连接的套接口不能用于接受新的连接,原套接口仍保持开放。
addr 参数为一个返回参数,其中填写的是为通讯层所知的连接实体地址。addr 参数的实
际格式由通讯时产生的地址族确定。addrlen 参数也是一个返回参数,在调用时初始化为 addr
所指的地址空间;在调用结束时它包含了实际返回的地址的长度(用字节数表示)。该函
数与 SOCK_STREAM 类型的面向连接的套接口一起使用。如果 addr 与 addrlen 中有一个为
零 NULL,将不返回所接受的套接口远程地址的任何信息。
返回值:
如果没有错误产生,则 accept()返回一个描述所接受包的 SOCKET 类型的值。否则的话,
返回 INVALID_SOCKET 错误,应用程序可通过调用 WSAGetLastError()来获得特定的错误
1