如何正常的關閉一個套接字

我們在利用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;
當在完成端口的數據被髮送出去之後,套接字就會被關閉,這樣我們就完成了一個套接字的關閉。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章