套接口库函数参考(六十二)

2010-12-30 21:03:01 · 作者: · 浏览: 59260
ncSelect().

 

 

5.1.22 shutdown()

简述:

  禁止在一个套接口上进行数据的接收与发送。

 

  #include <winsock.h>

 

  int PASCAL FAR shutdown( SOCKET s, int how);

 

  s:用于标识一个套接口的描述字。

  how:标志,用于描述禁止哪些操作。

 

注释:

  shutdown()函数用于任何类型的套接口禁止接收、禁止发送或禁止收发。

  如果how参数为0,则该套接口上的后续接收操作将被禁止。这对于低层协议无影响。对于TCP协议,TCP窗口不改变并接收前来的数据(但不确认)直至窗口满。对于UDP协议,接收并排队前来的数据。任何情况下都不会产生ICMP错误包。

  how1,则禁止后续发送操作。对于TCP,将发送FIN

  how2,则同时禁止收和发。

  请注意shutdown()函数并不关闭套接口,且套接口所占有的资源将被一直保持到closesocket()调用。

 

评注:

  无论SO_LINGER设置与否,shutdown()函数不会阻塞。

  一个应用程序不应依赖于重用一个已被shutdown()禁止的套接口。特别地,一个WINDOWS套接口实现不必支持在这样的套接口上使用connect()调用。

 

返回值:

  如果没有错误发生,shutdown()返回0。否则的话,返回SOCKET_ERROR错误,应用程序可通过WSAGetLastError()获取相应错误代码。

 

错误代码:

  WSANOTINITIALISED:在使用此API之前应首先成功地调用WSAStartup()

  WSAENETDOWNWINDOWS套接口实现检测到网络子系统失效。

  WSAEINVALhow参数非法。