我有一段代码,其中创建了一个服务器套接字并设置为监听特定端口号,比如 5005。现在一旦接受套接字函数返回,创建的套接字将被复制到 m_Socket 变量中,最后我关闭在本地创建名为 SocServer 的服务器套接字。
现在我的问题 SocServer(最初创建)和 m_Socket(接受返回时复制)是否有可能获得相同的数字,例如 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 中它显示建立了一段时间,然后根本没有连接。
注意:这种情况只发生在某些机器上,并不总是可以重现。任何其他与网络相关的问题是否是原因。
最佳答案
您确定正在连接到您的服务器的客户端没有关闭连接吗?此外,您没有提供任何使用 m_Socket 的函数,因此我无法告诉您在处理传入连接时是否有任何问题。我不认为 m_socket
和 SocServer
最终可能是一样的。
关于c++ - 创建相同的套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3044484/