c/c++语言开发共享接受多个后续连接到套接字

我有一个监听器,它将任意数据,HTTP请求传递给网络套接字,然后通过TCP传递。 这适用于第一个请求,但侦听器不接受后续的新请求。

我的问题是:

如果我有sock=accept(listener,(struct addr *)&sin, &sinlen); 然后,基于套接字函数引用,侦听器套接字保持打开状态,我应该能够为后续请求多次重新调用accept() 。 它是否正确? 如果是这样,有人比我更熟悉套接字编程,请解释一下这段代码的外观吗?

    是的,您可以在侦听套接字上多次accept() 。 要为多个客户端提供服务,您需要避免阻塞I / O – 即,在数据进入之前,您不能只读取套接字和阻塞。有两种方法:您可以在自己的线程中为每个客户端提供服务(或者通过在UNIX系统上使用fork()来自己的进程,或者你可以使用select()select()函数是一种检查数据是否可用于任何一组文件描述符的方法。 它可以在UNIX和Windows上使用。

    以下是Beej的网络编程指南中的一个简单示例。

     while(1) { // main accept() loop sin_size = sizeof their_addr; new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size); if (new_fd == -1) { perror("accept"); continue; } inet_ntop(their_addr.ss_family, get_in_addr((struct sockaddr *)&their_addr), s, sizeof s); printf("server: got connection from %sn", s); if (!fork()) { // this is the child process close(sockfd); // child doesn't need the listener if (send(new_fd, "Hello, world!", 13, 0) == -1) perror("send"); close(new_fd); exit(0); } close(new_fd); // parent doesn't need this } 

    子进程 – 在fork() – 从accept()父进程中的其他连接异步处理通信。

    是的,你有正确的总体思路。

    虽然我的C套接字编程有点生疏,但在服务器套接字上调用accept会将通信通道设置回套接字的客户端。 在将来的连接尝试中调用accept将设置多个套接字通道。

    这意味着应该注意不要用特定连接的数据覆盖单个共享结构,但这听起来不像是你容易犯的那种错误。

    需要了解更多c/c++开发分享接受多个后续连接到套接字,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

      以上就是c/c++开发分享接受多个后续连接到套接字相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/979329.html

      (0)
      上一篇 2021年12月12日
      下一篇 2021年12月12日

      精彩推荐