WEB开发网
开发学院软件开发VC 如何正常的关闭一个套接字 阅读

如何正常的关闭一个套接字

 2008-12-06 19:59:30 来源:WEB开发网   
核心提示:我们在利用IOCP(完成端口)进行程序设计的时候,经常要关闭一些不满足条件的套接字,如何正常的关闭一个套接字,假如我们直接采用closesocket方法进行关闭的话,绑定到IO端口的此套接字的未发送的数据就会丢失,套接字就会被关闭,这样我们就完成了一个套接字的关闭,这种情况是我们不愿意发生的,下面介绍一种合理关闭此套接

我们在利用IOCP(完成端口)进行程序设计的时候,经常要关闭一些不满足条件的套接字。假如我们直接采用closesocket方法进行关闭的话,绑定到IO端口的此套接字的未发送的数据就会丢失,这种情况是我们不愿意发生的。下面介绍一种合理关闭此套接字的方法:

首先,利用setsockopt(MSDN)函数设定套接字的选项,我们把此套接字设定为:假如有数据未发送,当数据发送完后再关闭此套接字。

代码如下:

LINGER lingerStruct;
       lingerStruct.l_onoff = 1;
       lingerStruct.l_linger = 0;
       setsockopt(Socket, SOL_SOCKET, SO_LINGER,
           (char *)&lingerStruct, sizeof(lingerStruct) );
  
       //
       // Now close the socket handle. This will do an abortive or graceful close, as requested.
       CancelIo((HANDLE) Socket);
  
       closesocket(Socket);
       clientSocket = INVALID_SOCKET;

当在完成端口的数据被发送出去之后,套接字就会被关闭,这样我们就完成了一个套接字的关闭。

本文出自 “YOUNG ADULT ,GOGOGO!” 博客,请务必保留此出处http://820808.blog.51cto.com/328558/65563

Tags:如何 正常 关闭

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接