TCP socket如何清空发送缓冲区
大致代码如下:
m_ConnectSock = socket(AF_INET , SOCK_STREAM , IPPROTO_TCP);
if ( m_ConnectSock == INVALID_SOCKET ) {
AfxMessageBox(_T("新建Socket失败!"));
return FALSE;
}
CString strServIp;
GetDlgItemText(IDC_IP_ADDR, strServIp);
int iPort = GetDlgItemInt(IDC_CONNECT_PORT);
if ( iPort <= 0 || iPort > 65535 ) {
AfxMessageBox(_T("请输入合适的端口:1 - 65535"));
goto __Error_End;
}
char szIpAddr[16] = {0};
USES_CONVERSION;
strcpy_s(szIpAddr, 16, T2A(strServIp));
sockaddr_in server;
server.sin_family = AF_INET;
server.sin_port = htons(iPort);
server.sin_addr.s_addr = inet_addr(szIpAddr);
if ( connect(m_ConnectSock, (struct sockaddr *)&server, sizeof(struct sockaddr)) == SOCKET_ERROR ) {
AfxMessageBox(_T("连接失败,请重试!"));
goto __Error_End;
}
__Error_End:
closesocket(m_ConnectSock);
return TRUE;
这样建立了一个TCP socket连接
用了一个select模型
BOOL SOCKET_Select(SOCKET hSocket, int nTimeOut, BOOL bRead)
{
fd_set fdset;
timeval tv;
FD_ZERO(&fdset);
FD_SET(hSocket, &fdset);
nTimeOut = nTimeOut > 1000 ? 1000 : nTimeOut;
tv.tv_sec = 0;
tv.tv_usec = nTimeOut;
int iRet = 0;
if ( bRead ) {
iRet = select(0, &fdset, NULL , NULL, &tv);
}else{
iRet = select(0, NULL , &fdset, NULL, &tv);
}
if(iRet <= 0) {
return FALSE;
} else if (FD_ISSET(hSocket, &fdset)){
return TRUE;
}
return FALSE;
}
问题是现在我用
SOCKET_Select(m_ConnectSock, 100, FALSE)
总是能检测到发送区有数据,如何清空发送缓冲区