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

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

我们在利用 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;
当在完成端口的数据被发送出去之后,套接字就会被关闭,这样我们就完成了一个套接字的关闭。

你可能感兴趣的:(如何正常的关闭一个套接字)