C ++在SOCKET上失败的accept()方法

时间:2010-10-23 16:54:29

标签: c++ sockets

我目前正在制作服务器,我学会了这样做:

while(true)
{
     SOCKET s = accept(s, ....)

     // do something with the connection
     printf("connection\n");
}

我了解到在没有连接的情况下它会停留在接受(..)。 在我的程序中还没有任何连接,但它连接溢出?我的意思是我的控制台被“连接”垃圾邮件。

那么什么错?


THX伙计我现在修理了它:)

4 个答案:

答案 0 :(得分:2)

很可能它会立即返回一个您似乎没有检查的错误。例如。可能是s没有正确创建等等。

编辑:刚刚注意到你将accept()的结果分配给同一个's',这是非常错误的。你的's'是一个普通的监听套接字,可能由socket()创建,由bind()绑定并设置为listen()监听,而accept()的返回值是另一个套接字,你应该用它来传输数据。 / p>

看一下这个例子(Googling找到):http://www.cs.odu.edu/~cs476/fall03/lectures/sockets.htm

答案 1 :(得分:0)

我调试了一点,我得到的每个失败套接字都有值:4294967295。

答案 2 :(得分:0)

我添加了一些支票:

while(true)
{
    SOCKET s = 
        accept(m_Socket, (sockaddr*)&from, &fromlen);

    if(s != SOCKET_ERROR)
    {
        printf("Client connected to the Server. ");
        Client* client = new Client(s); // Memory Leak here .. i know
    }
}

虽然没有连接任何客户端,但我的CPU为16%。

答案 3 :(得分:0)

调用WSAGetLastError()并查看它返回的内容。然后可以将此错误代码输入到错误查找工具中(您可以在Visual Studio的工具菜单中找到它)。您很可能错误地初始化了服务器套接字。