c – 如何让每个子进程获得不同的客户端地址(UDP SOCKET)?
发布时间:2020-12-16 07:04:05 所属栏目:百科 来源:网络整理
导读:我有个问题 : ???????? – 对于客户端发送的每条消息,服务器都会创建一个子进程(fork()),并且每个消息都由另一个子进程读取. ????????问题: ???????? – 有什么方法可以擦除sockaddr_in结构,这样当服务器在无限循环中再次进入一个时,它会等待一个不同的客
我有个问题 :
???????? – 对于客户端发送的每条消息,服务器都会创建一个子进程(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),(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()时被复制.
你最好让父母读取整个消息,然后fork()关闭传递读取消息的子节点,然后重新开始阅读下一条消息. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |