我正在製作一個偵聽多個端口的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