网络函数




  s:标识一已连接套接口的描述字。
  name:接收端地址的名字结构。
  namelen:一个指向名字结构的指针。

注释:
  getpeername()函数用于从端口s中获取与它捆绑的端口名,并把它存放在sockaddr
类型的name结构中。它适用于数据报或流类套接口。

返回值:
  若无错误发生,getpeername()返回0。否则的话,返回SOCKET_ERROR,应用程
序可通过WSAGetLastError()来获取相应的错误代码。

错误代码:
  WSANOTINITIALISED:在使用此API之前应首先成功地调用WSAStartup()。
  WSAENETDOWN:WINDOWS套接口实现检测到网络子系统失效。
  WSAEFAULT:namelen参数不够大。
  WSAEINPROGRESS:一个阻塞的WINDOWS套接口调用正在运行中。
  WSAENOTCONN 套接口未连接。
  WSAENOTSOCK:描述字不是一个套接口。

参见:
  bind(), socket(), getsockname().


5.1.6 getsockname()
简述:
  获取一个套接口的本地名字。

  #include <winsock.h>

  int PASCAL FAR getsockname( SOCKET s, struct sockaddr FAR* name,
  int FAR* namelen);

  s:标识一个已捆绑套接口的描述字。
  name:接收套接口的地址(名字)。
  namelen:名字缓冲区长度。

注释:
  getsockname()函数用于获取一个套接口的名字。它用于一个已捆绑或已连接套接
口s,本地地址将被返回。本调用特别适用于如下情况:未调用bind()就调用了
connect(),这时唯有getsockname()调用可以获知系统内定的本地地址。在返回时,
namelen参数包含了名字的实际字节数。
  若一个套接口与INADDR_ANY捆绑,也就是说该套接口可以用任意主机的地
址,此时除非调用connect()或accept()来连接,否则getsockname()将不会返回主机IP
地址的任何信息。除非套接口被连接,WINDOWS套接口应用程序不应假设IP地址
会从INADDR_ANY变成其他地址。这是因为对于多个主机环境下,除非套接口被
连接,否则该套接口所用的IP地址是不可知的。

返回值:
  若无错误发生,getsockname()返回0。否则的话,返回SOCKET_ERROR错误,
应用程序可通过WSAGetLastError()获取相应错误代码。


错误代码:
  WSANOTINITIALISED:在使用此API之前应首先成功地调用WSAStartup()。
  WSAENETDOWN:WINDOWS套接口实现检测到网络子系统失效。
  WSAEFAULT:namelen参数不够大。
  WSAEINPROGRESS:一个阻塞的WINDOWS套接口调用正在运行中。
  WSAENOTSOCK:描述字不是一个套接口。
  WSAEINVAL:套接口未用bind()捆绑。

参见:
  bind(), socket(), getpeername().


5.1.7 getsockopt()
简述:
  获取一个套接口选项。

  #include <winsock.h>
 
  int PASCAL FAR getsockopt( SOCKET s, int level, int optname,
  char FAR* optval, int FAR* optlen);

  s:一个标识套接口的描述字。
  level:选项定义的层次。支持的层次仅有SOL_SOCKET和IPPROTO_TCP。
  optname:需获取的套接口选项。
  optval:指针,指向存放所获得选项值的缓冲区。
  optlen:指针,指向optval缓冲区的长度值。

注释:
  getsockopt()函数用于获取任意类型、任意状态套接口的选项当前值,并把结果存
入optval。在不同协议层上存在选项,但往往是在最高的“套接口”层次上,设置
选项影响套接口的操作,诸如操作的阻塞与否、包的选径方式、带外数据的传送等。
  被选中选项的值放在optval缓冲区中。optlen所指向的整形数在初始时包含缓冲区
的长度,在调用返回时被置为实际值的长度。对SO_LINGER选项而言,相当于linger
结构的大小,对其他选项来说,是一个整形数的大小。
  如果未进行setsockopt()调用,则getsockopt()返回系统缺省值。
  getsockopt()支持下列选项。其中“类型”栏指出了optval所指向的值。仅有
TCP_NODELAY选项使用了IPPROTO_TCP层;其余选项均使用SOL_SOCKET
层。

选项        类型        意义
SO_ACCEPTCONN   BOOL        套接口正在用listen()监听。
SO_BROADCAST    BOOL        套接口设置为传送广播信息。
SO_DEBUG    BOOL        允许调试。
SO_DONTLINER    BOOL        若为真,则SO_LINGER选项被禁止。
SO_DONTROUTE    BOOL        禁止选径。
SO_ERROR    int     获取错误状态并清除。
SO_KEEPALIVE    BOOL        发送“保持活动”信息。
SO_LINGER   struct linger FAR*  返回当前各linger选项。
SO_OOBINLINE    BOOL        在普通数据流中接收带外数据。
SO_RCVBUF   int     接收缓冲区大小。
SO_REUSEADDR    BOOL        套接口能和一个已在使用中的地址捆绑。
SO_SNDBUF   int     发送缓冲区大小。
SO_TYPE     int     套接口类型(如SOCK_STREAM)。
TCP_NODELAY BOOL        禁止发送合并的Nagle算法。

getsockopt()不支持的BSD选项有:

选项名      类型        意义
SO_RCVLOWAT int     接收低级水印。
SO_RCVTIMEO int     接收超时。
SO_SNDLOWAT int     发送低级水印。
SO_SNDTIMEO int     发送超时。
IP_OPTIONS          获取IP头中选项。
TCP_MAXSEG  int     获取TCP最大段的长度。
  用一个未被支持的选项去调用getsockopt()将会返回一个WSAENOPROTOOPT错
误代码(可用WSAGetLastError()获取)。

返回值:
  若无错误发生,getsockopt()返回0。否则的话,返回SOCKET_ERROR错误,应
用程序可通过WSAGetLastError()获取相应错误代码。


错误代码:
  WSANOTINITIALISED:在使用此API之前应首先成功地调用WSAStartup()。
  WSAENETDOWN:WINDOWS套接口实现检测到网络子系统失效。
  WSAEFAULT:optlen参数非法。
  WSAEINPROGRESS:一个阻塞的WINDOWS套接口调用正在运行中。
  WSAENOPROTOOPT:未知或不支持选项。其中,SOCK_STREAM类型的套接
口不支持SO_BROADCAST选项,SOCK_DGRAM类型的套接口不支持
SO_ACCEPTCONN、SO_DONTLINGER 、SO_KEEPALIVE、SO_LINGER和
SO_OOBINLINE选项。
  WSAENOTSOCK:描述字不是一个套接口。

参见:
  setsockopt(), WSAAsyncSelect(), socket().

5.1.8 htonl()
简述:
  将主机的无符号长整形数转换成网络字节顺序。

  #include <winsock.h>

  u_long PASCAL FAR htonl( u_long hostlong);

  hostlong:主机字节顺序表达的32位数。

注释:
  本函数将一个32位数从主机字节顺序转换成网络字节顺序。

返回值:
  htonl()返回一个网络字节顺序的值。

参见:
  htons(), ntohl(), ntohs().
 

5.1.9 htons()
简述:
  将主机的无符号短整形数转换成网络字节顺序。

  #include <winsock.h>
 
  u_short PASCAL FAR htons( u_short hostshort);

  hostshort:主机字节顺序表达的16位数。

注释:
  本函数将一个16位数从主机字节顺序转换成网络字节顺序。

返回值:
  htons()返回一个网络字节顺序的值。

参见:
  htonl(), ntohl(), ntohs(). 

5.1.10 inet_addr()
简述:将一个点间隔地址转换成一个in_addr。

  #include <winsock.h>

  unsigned long PASCAL FAR inet_addr( const struct FAR* cp);

  cp:一个以Internet标准“.”间隔的字符串。

注释:
  本函数解释cp参数中的字符串,这个字符串用Internet的“.”间隔格式表示一个
数字的Internet地址。返回值可用作Internet地址。所有Internet地址以网络字节顺序
返回(字节从左到右排列)。
  Internet地址用“.”间隔的地址可有下列几种表达方式:
  a.b.c.d,a.b.c,a.b,a
  当四个部分都有定值时,每个都解释成一个字节数据,从左到右组成Internet四字
节地址。请注意,当一个Internet地址在Intel机器上表示成一个32位整型数时,则
上述的字节为“d.c.b.a”。这是因为Intel处理器的字节是从右向左排列的。
  请注意:只有Berkeley支持下述表达法,Internet其余各处均不支持。考虑到与软
件的兼容性,应按规定进行使用。
  对一个三部分地址,最后一部分解释成16位数据并作为网络地址的最右两个字
节。这样,三部分地址便很容易表示B组网络地址,如“128.net.host”.
  对一个两部分地址,最后一部分解释成24位数据并作为网络地址的最右三个字
节,这样,两部分地址便很容易表示C组网络地址,如“net.host”。
  对仅有一个部分的地址,则将它的值直接存入网络地址不作任何字节的重组。

返回值:
  若无错误发生,inet_addr()返回一个无符号长整型数,其中以适当字节顺序存放
Internet地址。如果传入的字符串不是一个合法的Internet地址,如“a.b.c.d”地址中
任一项超过255,那么inet_addr()返回INADDR_NONE。

参见:
  inet_ntoa().


5.1.11 inet_ntoa()
简述:
  将网络地址转换成“.”点隔的字符串格式。

  #include <winsock.h>

  char FAR* PASCAL FAR inet_ntoa( struct in_addr in);

  in:一个表示Internet主机地址的结构。

注释:
  本函数将一个用in参数所表示的Internet地址结构转换成以“.” 间隔的诸如
“a.b.c.d”的字符串形式。请注意inet_ntoa()返回的字符串存放在WINDOWS套接
口实现所分配的内存中。应用程序不应假设该内存是如何分配的。在同一个线程的
下一个WINDOWS套接口调用前,数据将保证是有效。

返回值:
  若无错误发生,inet_ntoa()返回一个字符指针。否则的话,返回NVLL。其中的数
据应在下一个WINDOWS套接口调用前复制出来。

参见:
  inet_addr().


5.1.12 ioctlsocket()
简述:
  控制套接口的模式。

  #include <winsock.h>

  int PASCAL FAR ioctlsocket( SOCKET s, long cmd, u_long FAR* argp);

  s:一个标识套接口的描述字。
  cmd:对套接口s的操作命令。
  argp:指向cmd命令所带参数的指针。

注释:
  本函数可用于任一状态的任一套接口。它用于获取与套接口相关的操作参数,而
与具体协议或通讯子系统无关。支持下列命令:
  FIONBIO:允许或禁止套接口s的非阻塞模式。argp指向一个无符号长整型。如
允许非阻塞模式则非零,如禁止非阻塞模式则为零。当创建一个套接口时,它就处
于阻塞模式(也就是说非阻塞模式被禁止)。这与BSD套接口是一致的。
WSAAsynSelect()函数将套接口自动设置为非阻塞模式。如果已对一个套接口进行了
WSAAsynSelect() 操作,则任何用ioctlsocket()来把套接口重新设置成阻塞模式的试
图将以WSAEINVAL失败。为了把套接口重新设置成阻塞模式,应用程序必须首先
用WSAAsynSelect()调用(IEvent参数置为0)来禁至WSAAsynSelect()。
  FIONREAD:确定套接口s自动读入的数据量。argp指向一个无符号长整型,其
中存有ioctlsocket()的返回值。如果s是SOCKET_STREAM类型,则FIONREAD返
回在一次recv()中所接收的所有数据量。这通常与套接口中排队的数据总量相同。
如果S是SOCK_DGRAM 型,则FIONREAD返回套接口上排队的第一个数据报大
小。
  SIOCATMARK:确实是否所有的带外数据都已被读入。这个命令仅适用于
SOCK_STREAM类型的套接口,且该套接口已被设置为可以在线接收带外数据
(SO_OOBINLINE)。如无带外数据等待读入,则该操作返回TRUE真。否则的话
返回FALSE假,下一个recv()或recvfrom()操作将检索“标记”前一些或所有数据。
应用程序可用SIOCATMARK操作来确定是否有数据剩下。如果在“紧急”(带外)
数据前有常规数据,则按序接收这些数据(请注意,recv()和recvfrom()操作不会在
一次调用中混淆常规数据与带外数据)。argp指向一个BOOL型数,ioctlsocket()在
其中存入返回值。

兼容性:
  本函数为Berkeley套接口函数ioctl()的一个子集。其中没有与FIOASYNC等价的
命令,SIOCATMARK是套接口层次支持的唯一命令。

返回值:
  成功后,ioctlsocket()返回0。否则的话,返回SOCKET_ERROR错误,应用程序
可通过WSAGetLastError()获取相应错误代码。


错误代码:
  WSANOTINITIALISED:在使用此API之前应首先成功地调用WSAStartup()。
  WSAENETDOWN:WINDOWS套接口实现检测到网络子系统失效。
  WSAEINVAL:cmd为非法命令,或者argp所指参数不适用于该cmd命令,或者
该命令
不适用于此种类型的套接口。
  WSAEINPROGRESS:一个阻塞的WINDOWS套接口调用正在运行中。
  WSAENOTSOCK:描述字不是一个套接口。

参见:
  socket(), setsockopt(), getsockopt(), WSAAsyncSelect().


5.1.13 listen()
简述:
  创建一个套接口并监听申请的连接.

  #include <winsock.h>

  int PASCAL FAR listen( SOCKET s, int backlog);

  S:用于标识一个已捆绑未连接套接口的描述字。
  backlog:等待连接队列的最大长度。

注释:
  为了接受连接,先用socket()创建一个套接口,然后用listen()为申请进入的连接建
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值