0

我正在编写 C++ 的多客户端聊天程序,我有一些我无法解决的问题。

1.当有用户进来时,服务器将Accept()客户端,然后分配一个socket id给客户端。当客户端断开连接时,另一个客户端进来,在服务器Accept()它之后,客户端将获得另一个套接字ID。我想重用套接字 id,但是 Accept()会给出比以前客户端的套接字 id 更大的套接字 id。那么,如何将套接字 id 分配给每个客户端?

2.我使用select(fdmax + 1, &read_fds, NULL, NULL, NULL)andfor(i = 0; i <= fdmax; i++)扫描每个存在的连接,客户端可以使用tenlet连接到我的服务器。除了聊天之外,客户端还可以在我的服务器上运行命令(如ls, cat),我的服务器将使用fork()并将dup()结果发送给客户端。这里有一个问题,如果用户分配一个新PATH的环境变量,PATH其他客户端的环境变量也会改变。我该如何避免这种情况,每个客户端都应该有自己的默认PATH值?

4

1 回答 1

0

对于第一个问题:您可能没有关闭 ( close(2)) 套接字(即使客户端断开连接)。虽然我在 POSIX 规范中找不到它,但通常accept(2)(以及几乎任何创建文件描述符的东西)都会返回尽可能小的描述符。

话虽如此,可能没有理由将您的应用程序与此联系起来。您的应用程序应该将accept其视为可以返回任何内容。

对于第二个问题,您应该PATH 在 fork 之后,就在您之前更改exec


除了所有这些,我注意到您正在标记您的问题 C++:您应该看看强大的asio

于 2012-11-10T06:04:41.643 回答