我如何使每个子进程获得不同的客户端地址(UDP套接字)
How can I make every child process get a different client address (UDP SOCKET)?
我有一个问题:
-对于客户端发送的每条消息,服务器创建一个子进程(fork()),并且每条消息都由不同的子进程读取。
问题:
-有没有办法我可以擦除sockaddr_in结构,这样当服务器再次进入无限循环时,它会等待一个不同的客户端,每个子客户端都有一个不同的地址。
A part of the server code:
struct sockaddr_in from;
int main(int argc, char *argv[]) {
int32_t stringLen;
initSocket();
printf("waiting for a connectionn");
while (true) {
int n;
socklen_t length = sizeof(struct sockaddr_in);
n = recvfrom(sock, &stringLen, sizeof(stringLen), 0,
(struct sockaddr *) &from, &length);
if (n > 0) {
int pid = fork();
printf("fork() pid = %dn", pid);
if (pid < 0) {
error("handling request");
}
if (pid == 0) {
printf("Client connected...n");
handle_request(stringLen);
}
cout << " PID : " << pid << endl;
}
}
}
Thank you !
正如我在评论中已经提到的:读取是由同一个套接字上的所有进程完成的,因为后者在fork()
ing时是重复的。
你最好让家长阅读整个消息,然后fork()
的孩子传递消息阅读,然后开始重新阅读下一个消息。
如果fork()创建了新的进程,同步操作可以简单地由文件IO执行。通过读写相同的配置文件,子进程可以从文件
相关文章:
- 将数据发送到多个客户端 UDP 时不支持地址族
- C++ UDP 服务器在获取客户端地址配置时发送消息
- 是否可以添加多个服务器地址?(Asio,客户端>服务器)
- ESP8266:如何在车站模式(sta_mode)中获取客户端地址
- 如何在GRPC客户端中创建到一个特定地址C++多个连接
- C++ - 程序在尝试在 TCP 客户端上连接到不存在的地址时表现出奇怪的行为
- getPeername()在客户端在虚拟机上运行时返回我的本地主机地址
- 无法在 gSOAP 服务器中获取 SOAP 客户端的 IP 地址
- 提升连接后从TCP服务器访问TCP客户端IP地址+端口
- 如何获取C++节俭的客户端 IP 地址
- 如何在接受C++中的连接之前获取客户端 IP 地址
- 如何使用IOCP获取客户端的真实ip地址和端口
- 如何获取客户端的 IP 地址
- 如何使用客户端调用堆栈中的地址从 PDB 检索文件/函数/行号?
- 如何使用OpenLDAP API选择LDAP客户端绑定到哪个地址
- 如何连接到 sock4 客户端的网络字节地址?
- 服务器如何存储客户端的 IP 地址?
- 如何使用libssh获取客户端ip地址
- UDP客户端多播:加入一个组,指定什么地址
- 我如何使每个子进程获得不同的客户端地址(UDP套接字)