想使程序在接收到数据后,立即发送携带ACK的应答数据。
希望实现流程为:
1。接收数据
2.立即发送应答数据
但是程序执行流程为:
1。接收数据
2.200毫秒后发送ACK
3。300毫秒后发送应答数据尝试通过SetSockOpt设置SOCKET,但现象依旧。
修改程序如下:
m_pSocket = new CListeningSocket(this);
if (m_pSocket->Create(788))
{
bool  nZero_1=1; 
int  nZero_2=0; m_pSocket->SetSockOpt(TCP_NODELAY , (const char *)(&nZero_1), sizeof(nZero_1), SOL_SOCKET); 
m_pSocket->SetSockOpt(SO_SNDBUF , (const char *)(&nZero_2), sizeof(nZero_2), SOL_SOCKET);
if (m_pSocket->Listen())
{
return TRUE;
}

}
else
return FALSE;

请教问题在何处?

解决方案 »

  1.   

    level = IPPROTO_TCP1Value Type Meaning 
    TCP_NODELAY BOOL Disables the Nagle algorithm for send coalescing. 
    1     included for backward compatibility with Windows Sockets 1.1 
    m_pSocket->SetSockOpt(TCP_NODELAY , (const char *)(&nZero_1), sizeof(nZero_1), IPPROTO_TCP1);
      

  2.   

    IPPROTO_TCP1  ??
    还是 IPPROTO_TCP  ??
    前者不能编译
      

  3.   

    NODELAY是发送缓冲算法。
             BOOL option=TRUE;
    BOOL ret=SetSockOpt(TCP_NODELAY,&option,sizeof(option),IPPROTO_TCP);
    if(ret==FALSE)
    {
    AfxMessageBox("Sets the sending delay time error!");
    }