我正在制作一个侦听多个端口的TCP/IP服务器。我选择使用select来启用处理多个事件。区分使用选择的套接字
所以目前,我有两个插座,连接到两个不同的端口(3000,3001)。
一旦我进入select循环,我希望服务器根据它当前处理的端口作出不同的响应。我怎么能说出我选择的插座?
我为我的选择循环添加了代码,希望你们能指点我正确的方向。请注意,这是在将两个文件描述符都添加到集合后开始的。
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。当客户端连接到时间套接字时,我想发送当前时间的客户端。当客户端连接到远程时,我想要执行远程执行。我怎样才能做出这个区别?
感谢您的帮助。
请张贴一些代码去与此,它将有助于给出更准确的答案。由于您没有列出您的编程语言,因此可能导致模糊的答案。 – BugFinder 2011-04-03 17:23:33
哎呀,我完全忘了语言标签,哦! – Blackbinary 2011-04-03 18:11:12
我编辑添加我的选择代码,我希望你们可以帮助:) – Blackbinary 2011-04-03 19:42:00