UDP編程之windows socket 緩衝區默認大小

筆者遇到下位機發過來的幾百k的文件,爲了調試方便,一開始並沒有加協議

後面發現在OnRecv的回調中打印消息時,居然UDP丟包了

後面經過多次分析,才發現windows默認的socket緩衝區是8k

使用setsockopt改大後就不會丟包了

int nRecvBuf = 700 * 1024;//設置爲700K
    if (0 != setsockopt(m_sock, SOL_SOCKET, SO_RCVBUF, (const char*)&nRecvBuf, sizeof(int)))
    {
        TRACE(_T("setsockopt buf size failed.\n"), WSAGetLastError());
        return FALSE;
    }

 

if (getsockopt(m_pListenContext->m_Socket, 

    SOL_SOCKET, 

    SO_SNDBUF, 

    (char*)&optVal, 

    &optLen) != SOCKET_ERROR)

    pirnt("SockOpt Sendbuff Value: %d\n", optVal);

 

if (getsockopt(m_pListenContext->m_Socket, 

    SOL_SOCKET, 

    SO_RCVBUF, 

    (char*)&optVal, 

    &optLen) != SOCKET_ERROR)

    pirnt("SockOpt Recvbuff Value: %d\n", optVal);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章