大龙的博客

常用链接

统计

最新评论

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

我们在利用IOCP(完成端口)进行程序设计的时候,经常要关闭一些不满足条件的套接字。假如我们直接采用closesocket方法进行关闭的话,绑定到IO端口的此套接字的未发送的数据就会丢失,这种情况是我们不愿意发生的。下面介绍一种合理关闭此套接字的方法:
 
首先,利用setsockoptMSDN)函数设定套接字的选项,我们把此套接字设定为:假如有数据未发送,当数据发送完后再关闭此套接字。
代码如下:
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;
当在完成端口的数据被发送出去之后,套接字就会被关闭,这样我们就完成了一个套接字的关闭。

posted on 2008-05-08 21:52 大龙 阅读(879) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理