我想使用标准 (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 端口。
你有什么想法吗?
此处不应考虑接受其他连接并立即关闭的选项。
最佳答案
只是不要accept(2)
新连接,直到您需要为止。循环接受、处理客户端对话并关闭连接的套接字。
关于c++ - 单连接服务器套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13806685/