socket通信accept语句执行太长(几百毫秒),会丢失数据怎么解决?

WSADATA data; //定义WSADATA结构体对象
WORD w = MAKEWORD(2, 0); //定义版本号码
::WSAStartup(w, &data); //初始化套接字库
SOCKET s, s1;
//定义连接套接字和数据收发套接字句柄

s = ::socket(AF_INET, SOCK_STREAM, 0);      //创建TCP套接字
sockaddr_in addr, addr2;                    //定义套接字地址结构
addr.sin_family = AF_INET;              //初始化地址结构
addr.sin_port = htons(6000);
addr.sin_addr.S_un.S_addr = INADDR_ANY;
int n = sizeof(addr2);

/*connect(s, (sockaddr*)&addr, sizeof(addr));*/

int tt = clock();
bind(s, (sockaddr*)&addr, sizeof(addr));
listen(s, 2);
//s1 = accept(s, (sockaddr*)&addr2, &n);


while (true)
{
    int t1 = clock();
    s1 = accept(s, (sockaddr*)&addr2, &n);//该语句时间很长
    int tt = clock();
    int time = tt - t1;
    char sztext[1000] = { 0 };


    recv(s1, sztext, sizeof(sztext), 0);

if (s1 == INVALID_SOCKET)
{
    AfxMessageBox(_T("通信故障"));
    break;
}
}

这个accept取决于你的客户端请求,有客户端请求了,才会accept,不然就阻塞在那