insock API 函数大全 2
本系统(WinKing)提供之 Windows Sockets API 介面乃是依照 1993年1月20日公布之 WINSOCK 第1.1版(如附录)中所定义之函式 (routine); 包括了30个Berkeley Software Distribution (BSD) 的函式以及16个符合 Windows Message-driven 特性的函式。
(11) inet_ntoa():将一网路位址转换成「点格式」字串。 格式: char FAR * PASCAL FAR inet_ntoa( struct in_addr in ); 参数: in 一个代表 Internet 位址的结构 传回值: 成功 - 一个代表位址的「点格式」(dotted) 字串 失败 - NULL 说明: 此函式将一 Internet 位址转换成「a.b.c.d」字串格式。
(12) ioctlsocket():控制 Socket 的模式。 格式: int PASCAL FAR ioctlsocket( SOCKET s, long cmd, u_long FAR *argP ); 参数: s Socket 的识别码,cmd 指令名称,argP 指向 cmd 参数的指标 传回值: 成功 - 0 失败 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因) 说明: 此函式用来获取或设定 Socket 的运作参数。其所提供的指令有: FIONBIO -- 开关 non-blocking 模式 FIONREAD -- 自 Socket 一次可读取的资料量 SIOCATMARK -- OOB 资料是否已被读取完 (*暂不提供此功能)
(13) listen():设定 Socket 为监听状态,准备被连接。 格 式: int PASCAL FAR listen( SOCKET s, int backlog ); 参 数: s Socket 的识别码,backlog 未真正完成连接前(尚未呼叫 accept() 前)彼端的连接要求的最大个数 传回值: 成功 - 0 失败 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因) 说明: 使用者可利用此函式来设定 Socket 进入监听状态,并设定最多可有多少个在未真正完成连接前的彼端的连接要求。(目前最大值限制为 5, 最小值为1)
(14) ntohl():将一 32 位元 u_long 的值由 network 排列方式转换成host 排列方式。 格式: u_long PASCAL FAR ntohl( u_long netlong ); 参数: netlong 一个 32 位元 network 排列方式的数目 传回值: 一个 32 位元 host 排列方式的数目 说明: 因为 network 的排列方式与 host 的排列方式可能不同,所以我们需要此一函式来做转换。
(15) ntohs():将一 16 位元 u_short 的值由 network 排列方式转换成host 排列方式。 格式: u_short PASCAL FAR ntohs( u_short netshort ); 参数: netshort 一个 16 位元 network 排列方式的数目 传回值: 一个 16 位元 host 排列方式的数目 说明: 因为 network 的排列方式与 host 的排列方式可能不同,所以我们需要此一函式来做转换。
(16) recv():自 Socket 接收资料。 格式: int PASCAL FAR recv( SOCKET s,char FAR *buf,int len,int flags ); 参数: s Socket 的识别码,buf 存放接收到的资料的暂存区,len buf 的长度,flags 此函式被呼叫的方式 传回值: 成功 - 接收到的资料长度 (若对方 Socket 已关闭,则为 0) 失败 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因) 说明: 此函式用来自连接式的 Datagram Socket 或 Stream Socket接收资料。对 Stream Socket 言,我们可以接收到目前有效的 (available)资料,但其数量不超过 len 的大小。若是此 Socket 设定 SO_OOBINLINE,且有 out-of-band 的资料未被读取,那麽只有 out-of-band 的资料被取出。 对 Datagram Socket 言,只取出第一个 datagram;若是该 datagram 大於使用者提供的储存空间,那麽只有该空间大小的资料被取出,多馀的资料将遗失,且回覆错误的讯息。 flags 的值可为 MSG_PEEK、MSG_OOB(*暂不提供此功能)的组合.
(17) recvfrom():读取一个 Datagram,并储存资料来源的位址。 格 式: int PASCAL FAR recvfrom( SOCKET s,char FAR *buf,int len,int flags,struct socketaddr FAR *from,int FAR *fromlen ); 参 数: s Socket 的识别码,buf 存放接收到的资料的暂存区,len buf 的长度,flags 此函式被呼叫的方式,from 资料来源的位址,fromlen from 的大小 传回值: 成功 - 接收到的资料长度 (若对方 Socket 已关闭,则为 0) 失败 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因) 说明: 此函式用来读取资料并记录资料来源的位址。对 Stream Socket 言,其作用与 recv() 相同,参数 from 及 fromlen 将不被用到。
(18) select():检查一或多个 Sockets 是否处於可读、可写或错误的状态。 格式: int PASCAL FAR select( int nfds,fd_set FAR *readfds,fd_set FAR *writefds,fd_set FAR *exceptfds,const struct timeval FAR *timeout ); 参数: nfds 此参数在此并无作用,readfds 要被检查是否可读的 Sockets,writefds 要被检查是否可写的 Sockets,exceptfds 要被检查是否有错误的 Sockets,timeout 此函式该等待的时间。若为 NULL 时,表示 blocking,此函式会等到有事件发生。 传回值: 成功 - 符合条件的 Sockets 总数 (若 Timeout 发生,则为 0) 失败 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因) 说明: 使用者可利用此函式来检查 Sockets 是否有资料可被读取,或是有空间可以写入,或是有错误发生。
(19) send():使用连接式的 Socket 传送资料。 格式: int PASCAL FAR send( SOCKET s,const char FAR *buf,int len,int flags ); 参数: s Socket 的识别码,buf 存放要传送的资料的暂存区,len buf 的长度,flags 此函式被呼叫的方式 传回值: 成功 - 送出的资料长度 失败 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因) 说明: 此函式适用於连接式的 Datagram 或 Stream Socket 来传送资料。对 Datagram Socket 言,若是 datagram 的大小超过限制,则将不会送出任何资料,并会传回错误值。若是传送 (transport) 系统内之储存空间不够存放这些要传送的资料,send() 将会被 block 住,除非该 Socket 被设定为 non-blocking 模式。使用者亦须注意 send()函式执行完成,并不表示资料已经成功地送抵对方了。 flags 的值可设为 MSG_DONTROUTE(*暂不提供此功能)及 MSG_OOB 的组合.
(20) sendto():将资料送到指定的目的地。 格式: int PASCAL FAR sendto( SOCKET s,const char FAR *buf,int len,int flags,const struct sockaddr FAR *to,int tolen ); 参数: s Socket 的识别码,buf 存放要传送的资料的暂存区,len buf 的长度,flags 此函式被呼叫的方式,to 资料要送达的位址,tolen to 的大小 传回值: 成功 - 送出的资料长度 失败 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因) 说明: 此函式适用於 Datagram 或 Stream Socket 来传送资料到指定的位址。对 Datagram Socket 言,若是 datagram 的大小超过限制,则将不会送出任何资料,并会传回错误值。对 Stream Socket 言,其作用与 send() 相同;参数 to 及 tolen 在此并无作用。 若是传送 (transport) 系统内之储存空间不够存放这些要传送的资料,sendto() 将会被 block 住,除非该Socket 被设定为 non-blocking 模式。使用者亦须注意 sendto() 函式执行完成,并不表示资料已经成功地送抵对方了。 flags 的值可设为 MSG_DONTROUTE(*暂不提供此功能)及 MSG_OOB 的组合.
Winsock API 函数大全 3 |
本系统(WinKing)提供之 Windows Sockets API 介面乃是依照 1993年1月20日公布之 WINSOCK 第1.1版(如附录)中所定义之函式 (routine); 包括了30个Berkeley Software Distribution (BSD) 的函式以及16个符合 Windows Message-driven 特性的函式。
(21) setsockopt():设定 Socket 的状态。 格式: int PASCAL FAR setsockopt( SOCKET s,int level,int optname,const char FAR *optval,int optlen ); 参数: s Socket 的识别码,level 选项设定的 level,optname 选项名称,optval 选项的设定值,optlen 选项设定值的长度 传回值: 成功 - 0 失败 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因) 说明: 此函式用来设定 Socket 的一些选项,藉以更改其动作。 可更改的选项有: (参见WINSOCK第1.1版54页) Value Type ----------------------------------------------- SO_BROADCAST BOOL *SO_DEBUG BOOL SO_DONTLINGER BOOL *SO_DONTROUTE BOOL *SO_KEEPALIVE BOOL SO_LINGER struct linger FAR* SO_OOBINLINE BOOL *SO_RCVBUF int SO_REUSEADDR BOOL *SO_SNDBUF int TCP_NODELAY BOOL
(22) shutdown():停止 Socket 接收/传送的功能。 格式: int PASCAL FAR shutdown( SOCKET s, int how ); 参数: s Socket 的识别码,how 代表该停止那些动作的标帜 传回值: 成功 - 0 失败 - SOCKET_ERROR (呼叫 WSAGetLastError()可得知原因) 说明: 此函式用来停止 Socket 的後续接收或传送的功能。 若 how 的值为 0,则不再接收资料。 若 how 的值为 1,则不再允许传送资料。 若 how 的值为 2,则不再接收且不再传送资料。 shutdown() 函式并没有将 Socket 关闭,所以该 Socket 所占用之资源必须在呼叫closesocket() 之後才会释放。
(23) socket():建立Socket。 格式: SOCKET PASCAL FAR socket( int af,int type,int protocol ); 参数: af 目前只提供 PF_INET(AF_INET),type Socket 的型态 (SOCK_STREAM、SOCK_DGRAM),protocol 通讯协定(如果使用者不指定则设为0) 传回值: 成功 - Socket 的识别码 失败 - INVALID_SOCKET(呼叫 WSAGetLastError() 可得知原因) 说明: 此函式用来建立一 Socket,并为此 Socket 建立其所使用的资源。 Socket 的型态可为 Stream Socket 或 Datagram Socket。
(24) gethostbyaddr():利用某一 host 的位址来获取该 host 的资料。 格式: struct hostent FAR * PASCAL FAR gethostbyaddr( const char FAR *addr, int len, int type ); 参数: addr network 排列方式的位址,len addr 的长度,type PF_INET(AF_INET) 传回值: 成功 - 指向 struct hostent 的指标 struct hostent { char FAR * h_name; char FAR * FAR * h_aliases; short h_addrtype; short h_length; char FAR * FAR * h_addr_list; } 失败 - NULL (呼叫 WSAGetLastError() 可得知原因) 说明: 此函式是利用位址来获取 host的其他资料,如 host 的名称、别名,位址的型态、长度等。
(25) gethostbyname():利用某一 host 的名称来获取该 host 的资料。 格式: struct hostent FAR * PASCAL FAR gethostbyname( const char FAR *name ); 参数: name host 的名称 传回值: 成功 - 指向 struct hostent 的指标 struct hostent { char FAR * h_name; char FAR * FAR * h_aliases; short h_addrtype; short h_length; char FAR * FAR * h_addr_list; } 失败 - NULL (呼叫 WSAGetLastError() 可得知原因) 说明: 此函式是利用 host 名称来获取其他的资料,如 host 的位址、别名,位址的型态、长度等。
(26) gethostname():获取目前使用者使用的 host 的名称。 格式: int PASCAL FAR gethostname( char FAR *name, int namelen ); 参数: name 用来存放 host 名称的暂存区,namelen name 的大小 传回值: 成功 - 0 失败 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因) 说明: 此函式用来获取 host 的名称。
(27) getprotobyname():依照通讯协定 (protocol) 的名称来获取该通讯协定的其他资料。 格式: struct protoent FAR * PASCAL FAR getprotobyname( const char FAR *name ); 参数: name 通讯协定名称 传回值: 成功 - 一指向 struct protoent 的指标 struct protoent { char FAR * p_name; char FAR * FAR * p_aliases; short p_proto; } 失败 - NULL (呼叫 WSAGetLastError() 可得知原因) 说明: 利用通讯协定的名称来得知该通讯协定的别名、编号等资料。
(28) getprotobynumber():依照通讯协定的编号来获取该通讯协定的其他资料。 格式: struct protoent FAR * PASCAL FAR getprotobynumber( int number ); 参数: number 以 host 排列方式的通讯协定编号 传回值: 成功 - 一指向 struct protoent 的指标 struct protoent { char FAR * p_name; char FAR * FAR * p_aliases; short p_proto; } 失败 - NULL (呼叫 WSAGetLastError() 可得知原因) 说明: 利用通讯协定的编号来得知该通讯协定的名称、别名等资料。
(29) getservbyname():依照服务 (service) 名称及通讯协定来获取该服务的其他资料。 格式: struct servent * PASCAL FAR getservbyname( const char FAR *name, const char FAR *proto ); 参数: name 服务名称,proto 通讯协定名称 传回值: 成功 - 一指向 struct servent 的指标 struct servent { char FAR * s_name; char FAR * FAR * s_aliases; short s_port; char FAR * s_proto; } 失败 - NULL (呼叫 WSAGetLastError() 可得知原因) 说明: 利用服务名称及通讯协定来获得该服务的别名、使用的port编号等。
(30) getservbyport():依照服务 (service) 的 port 编号及通讯协定来获取该服务的其他资料。 格式: struct servent * PASCAL FAR getservbyport( int port, const char FAR *proto ); 参数: port 服务的 port 编号,proto 通讯协定名称,传回值: 成功 - 一指向 struct servent 的指标 struct servent { char FAR * s_name; char FAR * FAR * s_aliases; short s_port; char FAR * s_proto; } 失败 - NULL (呼叫 WSAGetLastError() 可得知原因) 说明: 利用 port 编号及通讯协定来获得该服务的名称、别名等。 |