ioctlsocket或recv需要更多时间在Windows套接字编程中执行?

时间:2011-11-29 14:02:18

标签: c++ winsock

在套接字编程中,一些数据被发送到服务器,一旦服务器收到它就会发送确认响应消息。它超过1个字节,所以我在接收时检查多个字节检查,这里我丢失大约120-200ms。这是一个非常大的问题。因为客户需要发回确认此确认。在服务器发送的同时,我已经嗅到了数据到达我的IP。但recv或ioctlsocket(检查超过1个字节是否可以读取)需要时间来读取多个字节。我该如何解决这个问题。代码如下。

        DWORD RecvCount = 0;    
        char szBuff1[2048];         
        bool stop = false;          
        while(!stop)
        {               
            ioctlsocket(*socket, FIONREAD, &RecvCount);
            if(RecvCount > 1)
                stop = true;
        }
        int Res = recv(*socket, szBuff1, RecvCount,0);

1 个答案:

答案 0 :(得分:2)

您应该在Windows上禁用Nagle算法,否则套接字将保留在您的数据上,直到缓冲区已满(或者至少在发送之前等待几百毫秒)。

您可以通过设置TCP_NODELAY套接字选项来执行此操作:

int flag = 1;
int result = setsockopt(m_Socket,IPPROTO_TCP,TCP_NODELAY,(char *) &flag,sizeof(int));