【问题标题】:Winsock send() always returns error 10057 in serverWinsock send() 总是在服务器中返回错误 10057
【发布时间】:2012-07-16 22:53:14
【问题描述】:

我正在尝试在连接时自动向客户端发出服务器请求,但我不断收到 10057 的 WSAGetLastError。我已经设置了从客户端到服务器的请求而没有问题,所以我不明白为什么我不能这样做相反 ?也许服务器必须等待客户端的第一次“发送”,但我不明白为什么会这样?

我正在使用:
-异步套接字
-TCP
-s 是一个有效的套接字
-我已经循环了 RequestInfo 几次,但没有任何变化
-select() 返回 0
-datasize 返回 -1,错误码为 10057

谢谢你!!!

服务器:

//first - following the debugger  
FD_ACCEPT  
int acc = accept(s, (struct sockaddr*)&fromm, &fromlenn);  //success
if(acc <= 0)  
{  
    eLOGG << "\nFAIL FD_ACCEPT: " << WSAGetLastError();  
}  
RequestInfo();   

//then
RequestInfo()
{
    stringstream ssConverter;
    ssConverter.clear();    ssConverter.str(string());
    ssConverter << "00aa";      //request signal

    bool blogin = false;

    eLOG << "signal is: *" << ssConverter.str() << "*";

    int bufSize = ssConverter.str().length();

    fd_set writefds;

    struct timeval timeout;
    timeout.tv_sec = 3;
    timeout.tv_usec = 0;

    FD_ZERO(&writefds);
    FD_SET(s, &writefds);

    int sel = select(s, NULL, &writefds, NULL, &timeout);
    if(sel == SOCKET_ERROR) 
    {
        eLOG << "\nselect - read fail: " << WSAGetLastError();
    }
    if(sel == 0)
    {
        eLOG << "\nselect - not connected: " << WSAGetLastError();
    }

    if (FD_ISSET(s, &writefds))
    {
        eLOG << "\n FD_ISSET";
    }
    eLOG << "\nauth socket is: " << s;
    int dataSize = send(s, ssConverter.str().c_str(), bufSize, 0);
    if(dataSize < bufSize)  
    {
        eLOG << "\n FD_ISSET";
    }
    //...etc
}

【问题讨论】:

    标签: c++ visual-studio-2010 sockets winsock winsock2


    【解决方案1】:

    您混淆了侦听服务器套接字s连接的套接字,您从accept() 中的acc 变量中获得。您不能通过服务器套接字发送或接收数据,因为它没有连接到任何东西。它的唯一目的是接受来自客户端的新连接。毕竟,服务器通常处理多个客户端。

    顺便说一下,连接的socket不会从服务器socket继承非阻塞状态,所以你需要在每个accept()之后标记它。

    【讨论】:

    • 啊,好吧,我没有意识到这一点。我已将int acc 更改为SOCKET acc 和我的send()s 等以使用连接的acc。现在可以了。因为我目前不想要多个客户端,所以在传递连接的套接字后立即关闭服务器的侦听套接字是否合理?
    • 如果是一次性连接接受,那么是的,您可以安全地关闭服务器套接字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    • 2020-04-20
    相关资源
    最近更新 更多