java socket 如何设置so_keepalive属性_socket通信的KeepAlive设定
socket通信的KeepAlive默認時間是2小時,通過以下代碼可以改變其時間,來檢測socket通信過程中自網線,服務器網線斷等事件
#include
#include "winsock2.h"
#include
#include
#pragma comment(lib, "Ws2_32.lib")
#include
#include "MSTcpIp.h"
using namespace std;
const int BUF_LEN = 1024;
class CDataSocket : public CAsyncSocket
{
public:
void OnConnect(int nErrorCode)
{
}
void OnReceive(int nErrorCode)
{
BYTE byBuf[BUF_LEN + 1];
int nRecv = Receive(byBuf, BUF_LEN);
do
{
byBuf[nRecv] = '\0';
}while ((nRecv = Receive(byBuf, BUF_LEN)) == BUF_LEN);
}
void OnClose(int nErrorCode)
{
}
};
void main()
{
AfxWinInit(::GetModuleHandle(NULL), NULL, NULL, 0);
AfxSocketInit();
CAsyncSocket* psock = new CDataSocket;
psock->Create();
// KeepAlive
BOOL bOptVal = TRUE;
int bOptLen = sizeof(BOOL);
int iOptVal;
int iOptLen = sizeof(int);??? if (getsockopt(psock->m_hSocket, SOL_SOCKET, SO_KEEPALIVE,
(char*)& iOptVal, & iOptLen) != SOCKET_ERROR) {
printf("SO_KEEPALIVE Value: %ld\n", iOptVal);
}
if (setsockopt(psock->m_hSocket, SOL_SOCKET, SO_KEEPALIVE,
(char*)& bOptVal, bOptLen) != SOCKET_ERROR) {
printf("Set SO_KEEPALIVE: ON\n");
}
if (getsockopt(psock->m_hSocket, SOL_SOCKET, SO_KEEPALIVE,
(char*)& iOptVal, & iOptLen) != SOCKET_ERROR) {
printf("SO_KEEPALIVE Value: %ld\n", iOptVal);
}
DWORD dwBytes,dwError = 0L ;
tcp_keepalive sKA_Settings = {0}, sReturned = {0} ;
sKA_Settings.onoff = 1 ;
sKA_Settings.keepalivetime = 20000 ; // Keep Alive
sKA_Settings.keepaliveinterval = 1000 ; // Resend if No-Reply
if (WSAIoctl(psock->m_hSocket, SIO_KEEPALIVE_VALS, & sKA_Settings,
sizeof(sKA_Settings), & sReturned, sizeof(sReturned), & dwBytes,
NULL, NULL) != 0)
{
dwError = WSAGetLastError() ;
return ;
}
psock->Connect(_T("XXX.XXX.XXX.XXX"), 5001);
}
總結
以上是生活随笔為你收集整理的java socket 如何设置so_keepalive属性_socket通信的KeepAlive设定的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java有趣的小功能_Java8 中有趣
- 下一篇: js中的if与Java中的if_JS中的