📄 windowssocketsapi.txt
字号:
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
(*暂不提供此功能)的组合。(参考 WINSOCK 第1.1版41 页)
(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 的大小
Windows Sockets API 介面页码,6/11
http://www.gezehua.com/txt/go.asp?id=349 2004-10-21
传回值: 成功 - 接收到的资料长度 (若对方 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 的组合。(参见 WINSOCK第1.1版48页)
(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 此函式被呼叫的方式
Windows Sockets API 介面页码,7/11
http://www.gezehua.com/txt/go.asp?id=349 2004-10-21
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第1.1版51页)
(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,则不再允许传送资料。
Windows Sockets API 介面页码,8/11
http://www.gezehua.com/txt/go.asp?id=349 2004-10-21
若 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 的位址、
别名,位址的型态、长度等。
Windows Sockets API 介面页码,9/11
http://www.gezehua.com/txt/go.asp?id=349 2004-10-21
(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;
Windows Sockets API 介面页码,10/11
http://www.gezehua.com/txt/go.asp?id=349 2004-10-21
『关闭窗口』
}
失败 - 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 编号及通讯协定来获得该服务的名称、别名等。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -