代码之家  ›  专栏  ›  技术社区  ›  ckv

正在创建相同的套接字

  •  0
  • ckv  · 技术社区  · 14 年前

    我有一段代码,其中创建了一个服务器套接字,并将其设置为侦听特定的端口号(比如5005)。现在,一旦accept socket函数返回,创建的套接字就会复制到m\u socket变量中,最后我关闭了名为SocServer的服务器套接字,该套接字是在本地创建的。

    现在我的问题是 SocServer(最初创建的)和m\u 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ïu socket是否可能是相同的,因为

    注:这只发生在一些机器上,并不总是可复制的。原因是否与其他网络相关。

    2 回复  |  直到 14 年前
        1
  •  2
  •   PeterK    14 年前

    您确定正在连接到您的服务器的客户端没有关闭连接吗?另外,您没有提供任何使用mïu套接字的函数,因此我无法告诉您在处理传入连接时是否有任何问题。我不这么认为 m_socket SocServer

        2
  •  1
  •   anon anon    14 年前

    在本规范中:

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

    为什么调用accept()时使用的是一个显然不好的套接字?您是否测试从accept()返回的值?