我正在制作一个侦听多个端口的TCP / IP服务器。 我选择使用select来启用多个事件的处理。
所以此刻,我有两个sockets,连接到两个不同的端口(3000,3001)。
一旦我进入选择循环,我希望服务器根据它当前处理的端口做出不同的响应。 如果在选择内部,我怎么能分辨出我在哪个sockets?
我正在为我的选择循环添加代码,希望你们能指出我正确的方向。 请注意,这是在我将两个文件描述符添加到集合后开始的。
while(1) { /* Block until input arrives on one or more active sockets. */ readfds = activefds; if (select (FD_SETSIZE, &readfds, NULL, NULL, NULL) < 0) { perror ("select"); exit (EXIT_FAILURE); } /* Service all the sockets with input pending. */ for (i = 0; i < FD_SETSIZE; ++i) { if (FD_ISSET (i, &readfds)) { if (i == S_time) { if ((NS = accept(S_time,NULL,NULL)) < 0) ERROR("server: accept"); FD_SET(NS, &activefds); //add the new socket desc to our active connections set send_time(NS); } else if (i == S_remote)// i == S_remote { fprintf(stderr,"Remote"); int status = recieve_request(S_remote); /* Data arriving on an already-connected socket. */ } else { break; } } } /* //end of for */ } /* //end of while */
所以我的两个套接字是S_time和S_remote。 当客户端连接到时间套接字时,我想要将该客户端发送到当前时间。 当客户端连接到远程时,我想做远程执行。 我怎样才能做出这种区分?
感谢你的帮助。
select()
处理文件描述符,它不知道有关端口号的任何信息。
您需要自己跟踪这些信息(例如,通过文件描述符键入的映射),或者只使用多组文件描述符(其中每组特定于一个端口)并调用select
为零超时(非 – 每个集合上的阻塞)。
检查此解释和示例代码 ,似乎它回答了您的问题。 简而言之,在select()返回后,相应的描述符包含在相应的集合中。 有关详细信息请点击链接。
以上就是c/c++开发分享使用Select区分套接字相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/523104.html