這裏是我正在使用的代碼。每當我向Stdin寫入內容時,它都能正常工作,但它不適用於套接字。它無法進入Socket的循環。我是socket編程的新手。套接字不工作的文件描述符
void HandleConnection(int socket)
{
fd_set rfd;
struct timeval tv;
int retval;
printf("%d",socket);
MakeNonBlocking(socket);
/* Watch stdin (fd 0) to see when it has input. */
FD_ZERO(&rfd);
while(1)
{
FD_SET(STDIN, &rfd);
FD_SET(socket, &rfd);
/* Wait up to five seconds. */
tv.tv_sec = 50;
tv.tv_usec = 0;
retval = select(2, &rfd,NULL, NULL, &tv);
if(retval == 0)
{
printf("No data within fifty seconds.\n");
exit(1);
}
if(FD_ISSET(socket,&rfd))
{
printf("socket wala\n");
recieve_message(&socket);
send_message(&socket);
}
if(FD_ISSET(STDIN,&rfd))
{
printf("stdin wala\n");
recieve_message(&socket);
send_message(&socket);
}
}
}
您需要在循環內放置'FD_ZERO(&rfd)'。你需要正確地將第一個參數設置爲'select()',2可能不是正確的值,它應該是'max(STDIN,socket)+ 1'。 – Barmar 2013-05-12 10:52:07