首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

2.3.8 关闭套接字

套接字使用完成之后,要调用下面这两个函数来关闭套接字:shutdown()函数和close()函数。

首先调用shutdown()函数,其函数定义如下:

int shutdown( int socket, int how );

第一个参数是想要关闭的套接字,第二个参数是关闭此套接字正在采用的方法。几乎所有情况下,此值都使用2,表示同时关闭发送和接收。其他两种可能的选择是0和1,分别表示关闭接收和发送。

同样,如果函数执行成功,则返回0;如果函数执行失败,则返回-1。表2.10列出了此函数可能的错误代码。

表2.10 shutdown () 函数的错误代码

错    误

含    义

ENETDOWN

网络已经失败并断开

EINVAL

套接字无效

EINPROGRESS

对此函数的调用仍在进行中,因此不能完成新的调用

ENOTCONN

套接字没有被连接

ENOTSOCK

传递过来的套接字描述符不是真正的套接字

WSAENOTINITIALIZED(注释1)

Socket库没有初始化

注释1:只适用于Winsock。

套接字关闭之后,它仍然存在于系统中。套接字维护发送或接收的任何未处理的数据,并正常停止,但套接字还没有关闭。需要再一次调用才能关闭它。

在UNIX操作系统中,套接字是文件。正是由于这个原因,所以可以使用标准的UNIX close()函数来关闭套接字。

但是,Windows套接字则不是文件,因此调用close()函数对套接字不起作用。由于这一原因,微软将函数名改为closesocket(),参数和返回值是相同的。函数定义如下:

int close( int socket );

此函数相当简单,同样,如果函数执行成功,则返回0;如果函数执行失败,则返回-1。此函数的错误代码与shutdown()函数相同,如表2.10所示。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论