我有这段代码,其中创建了一个服务器套接字并设置为侦听特定的端口号,例如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中它显示已建立一段时间,然后根本没有连接。
注意:这仅在某些机器上发生,并且始终无法重现。可以解决任何其他与网络相关的问题。
答案 0 :(得分:2)
您确定连接到服务器的客户端没有关闭连接吗?此外,您没有提供任何使用m_Socket的函数,因此在处理传入连接时我无法告诉您是否有任何问题。我认为m_socket
和SocServer
最终可能不会相同。
答案 1 :(得分:1)
在此代码中:
m_Socket=accept(SocServer,(struct sockaddr*)&insock,&insocklen);
if(SocServer != INVALID_SOCKET)
为什么用可能显然是坏套接字的方式调用accept()?你在任何地方测试你从accept()获得的价值吗?