我想使用标准(socket.h)库实现一个服务器 c++ 服务器程序(在 linux 下),该库只接受一个活动连接。我对如何实现这一点的理解是这样的(我已经删除了错误检查):
int port = 4711;
int MAXCONNECTIONS = 5;
int m_sock;
m_sock = socket ( AF_INET, SOCK_STREAM, 0 );
int on = 1;
setsockopt ( m_sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof ( on ) ) < 0
sockaddr_in m_addr;
m_addr.sin_family = AF_INET;
m_addr.sin_addr.s_addr = INADDR_ANY;
m_addr.sin_port = htons ( port );
bind ( m_sock, ( struct sockaddr * ) &m_addr,
sizeof ( m_addr ) );
listen ( m_sock, MAXCONNECTIONS );
// now accept new connection and get socket
int con_sock;
int addr_length = sizeof ( m_addr );
con_sock = accept ( m_sock, ( sockaddr * ) &m_addr, ( socklen_t * ) &addr_length );
到目前为止,这在我的代码中有效。但创建的第一个套接字仍将接受连接。据我了解,我现在需要关闭第一个套接字。
close ( m_sock );
这可以防止新的连接。但是现在当第一个发生故障时,我无法重新建立任何连接。据我了解,我将不得不重复与上述相同的过程。
我遇到的是我的代码运行良好,直到接受它会阻塞并等待连接但客户端连接将收到“连接被拒绝”并且我在 netstat 中看不到任何 LISTEN 端口。
你有什么想法?
此处不考虑接受其他连接并立即关闭它们的选项。