c++ - 单连接服务器套接字

标签 c++ sockets

我想使用标准 (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/

相关文章:

c++ - Google Test 中存储期望值的位置?

c++ - "Overloading"带有 SFINAE 的构造函数

c++ - Qt - Esc 不应该关闭对话框

c++ - 类型类似于泛型函数的模板成员变量

java - 是什么导致我的 java.net.SocketException : Connection reset?

Java - SSL - 使用 gmail 的 SMTP 服务器进行身份验证

c++ - 难以解析 hdf5 复合数据类型

对 nodejs 服务器的 C++ POST 请求失败(基于套接字)

python-3.x - 使用Python解码套接字中收到的字节

wcf - WCF 是否适合实现旧版网络服务?