创建相同的套接字

时间:2010-06-15 10:56:32

标签: c++ sockets

我有这段代码,其中创建了一个服务器套接字并设置为侦听特定的端口号,例如5005.现在,一旦接受套接字函数返回,创建的套接字被复制到m_Socket变量中,最后我关闭名为SocServer的服务器套接字,是在本地创建的。

现在我的问题 是否有可能SocServer(最初创建)和m_Socket(在accept返回时复制)获得相同的数字,比如1500。

struct sockaddr_in   ServerSock;                        // Socket address structure to bind the Port Number to listen to

    char *localIP ;

    SOCKET SocServer;

    //To Set up the sockaddr structure
    ServerSock.sin_family = AF_INET;
    ServerSock.sin_addr.s_addr = INADDR_ANY    
    ServerSock.sin_port = htons(PortNumber);//port number of 5005

    // To Create a socket for listening on PortNumber
    if(( SocServer = socket( AF_INET, SOCK_STREAM, 0 )) == INVALID_SOCKET )
    {
        return FALSE;
    }

    //To bind the socket with wPortNumber
    if(bind(SocServer,(sockaddr*)&ServerSock,sizeof(ServerSock))!=0)
    {
        return FALSE;
    }

    // To Listen for the connection on wPortNumber
    if(listen(SocServer,SOMAXCONN)!=0)
    {
        return FALSE;
    }

    // Structure to get the IP Address of the connecting Entity
    sockaddr_in insock;
        int insocklen=sizeof(insock);
        //To accept the Incoming connection on the wPortNumber
    m_Socket=accept(SocServer,(struct sockaddr*)&insock,&insocklen);
     //delete the server socket
     if(SocServer != INVALID_SOCKET)
    {
        //To close and shutdown the Socserver
        shutdown(SocServer, 2 );      
        closesocket(SocServer);
    }

是否有可能Socserver和m_socket是相同的,因为

根据我的代码建立套接字连接,并且由于某些其他原因它被关闭,在TCPView中它显示已建立一段时间,然后根本没有连接。

注意:这仅在某些机器上发生,并且始终无法重现。可以解决任何其他与网络相关的问题。

2 个答案:

答案 0 :(得分:2)

您确定连接到服务器的客户端没有关闭连接吗?此外,您没有提供任何使用m_Socket的函数,因此在处理传入连接时我无法告诉您是否有任何问题。我认为m_socketSocServer最终可能不会相同。

答案 1 :(得分:1)

在此代码中:

 m_Socket=accept(SocServer,(struct sockaddr*)&insock,&insocklen);
 if(SocServer != INVALID_SOCKET)

为什么用可能显然是坏套接字的方式调用accept()?你在任何地方测试你从accept()获得的价值吗?